Нужно отсортировать массив: сперва числа кратные 3 по возрастанию, потом за убывание остальные числа. Код сортирует только кратные 3 и то из-за второго if начались проблемы, числа начали путаться. #include <iostream> using namespace std; int main() { setlocale(LC_ALL, ""); int m[5], i, t, j, k; for (i = 0; i <= 4; i++) { s:cout << "Введите значение " << i + 1 << " массива ( >0 ): "; cin >> m[i]; if (m[i] < 0) { cout << "Массив был введен не верно. "; goto s; } } for (i = 0; i <= 4; i++) { for (j = 0; j <= 4; j++) { if (m[j] > m[j + 1] && (m[j] % 3 == 0 && m[j + 1] % 3 == 0)) { t = m[j]; m[j] = m[j + 1]; m[j + 1] = t; k = j; } else if (m[j] > m[j + 1] && (m[j] % 3 != 0 && m[j + 1] % 3 != 0)) { t = m[j]; m[j] = m[j + 1]; m[j + 1] = t; } } } for (i = 0; i <= 4; i++) { cout << m[i] << " "; } return 0; } Code #include <iostream> using namespace std; int main() { setlocale(LC_ALL, ""); int m[5], i, t, j, k; for (i = 0; i <= 4; i++) { s:cout << "Введите значение " << i + 1 << " массива ( >0 ): "; cin >> m[i]; if (m[i] < 0) { cout << "Массив был введен не верно. "; goto s; } } for (i = 0; i <= 4; i++) { for (j = 0; j <= 4; j++) { if (m[j] > m[j + 1] && (m[j] % 3 == 0 && m[j + 1] % 3 == 0)) { t = m[j]; m[j] = m[j + 1]; m[j + 1] = t; k = j; } else if (m[j] > m[j + 1] && (m[j] % 3 != 0 && m[j + 1] % 3 != 0)) { t = m[j]; m[j] = m[j + 1]; m[j + 1] = t; } } } for (i = 0; i <= 4; i++) { cout << m[i] << " "; } return 0; }
Если можно использовать всю мощь стандартной библиотеки, то можно воспользоваться функцией sort. Тогда достаточно описать правило, по которому должны сортироваться числа. Код #include <iostream> #include <algorithm> #include <vector> #include <ctime> #include <cstdlib> using namespace std; int main(int argc, char const *argv[]) { srand(time(NULL)); const int size = 100; vector<int> v; for(int i = 0; i < size; i++) v.push_back(rand() % 1000); sort(v.begin(), v.end(), [](int a, int b){ if(a % 3 == 0) { if(b % 3 == 0) return a < b; // пусть кратные 3-м сортируются по возрастанию else return true; // пусть кратные 3-м "опускаются" в начало массива } else { if(b % 3 == 0) return false; // то же самое, что предыдущее else return a > b; // пусть не кратные 3-м сортируются по убыванию } }); for(int &it : v){ std::cout << it << '\n'; } return 0; } C #include <iostream> #include <algorithm> #include <vector> #include <ctime> #include <cstdlib> using namespace std; int main(int argc, char const *argv[]) { srand(time(NULL)); const int size = 100; vector<int> v; for(int i = 0; i < size; i++) v.push_back(rand() % 1000); sort(v.begin(), v.end(), [](int a, int b){ if(a % 3 == 0) { if(b % 3 == 0) return a < b; // пусть кратные 3-м сортируются по возрастанию else return true; // пусть кратные 3-м "опускаются" в начало массива } else { if(b % 3 == 0) return false; // то же самое, что предыдущее else return a > b; // пусть не кратные 3-м сортируются по убыванию } }); for(int &it : v){ std::cout << it << '\n'; } return 0; }