Я не опоздал? У нас ещё только 22:50.
| Код | #define SIZE 15
// ф-ция нахождения в массиве индекса мин. элемента int minElem(int * ar, int beg, int size) { int min = INT_MAX; int ind = beg; for(int i = beg; i < size; i++) { // мин эл-нт должен быть кратным 3 или 5 if((ar[i] < min) && ((ar[i] % 3 == 0) || (ar[i] % 5 == 0))) { min = ar[i]; ind = i; } } return ind; }
// ф-ция нахождения в массиве индекса макс. элемента int maxElem(int * ar, int beg, int size) { int max = INT_MIN; int ind = beg;
for(int i = beg; i < size; i++) { // макс эл-нт должен быть чётным числом if((ar[i] > max) && (ar[i] % 2 == 0)) { max = ar[i]; ind = i; } }
return ind; }
// обмен элементов void swap(int& a, int& b) { int tmp; tmp = a; a = b; b = tmp; }
int main() { srand((unsigned) time(NULL)); int arr[SIZE]; int i, j = 0;
// заполняем массив и выводим на экран for(i = 0; i < SIZE; i++) { arr[i] = rand() % 99 + 1; cout << arr[i] << ' '; } cout << endl;
// в цикле находим мин эл-нт массива, соответсвующий // условию: "числа кратные 3 или 5" for(i = 0; i < SIZE - 1; i++) { // и меняем его местами с i-тым, сортируя массив по возрастанию swap(arr[i], arr[minElem(arr, i, SIZE)]);
// запоминаем место, где начнётся вторая часть массива if(arr[i] % 3 == 0 || arr[i] % 5 == 0) j++; }
// в цикле находим макс элемент оставшегося массива, соответсвующий // условию: "чётные числа" for(i = j; i < SIZE - 1; i++) { // и меняем его местами с i-тым, сортируя массив по убыванию swap(arr[i], arr[maxElem(arr, i, SIZE)]); } // выводим на экран отсортированый, согласно условиям, массив for(i = 0; i < SIZE; i++) cout << arr[i] << ' '; // всё, вроде бы... cout << endl; return 0; } |
|