Дана действительная матрица размером m * n; упорядочить (переставить) строки матрицы по невозрастанию максимальных элементов строк матрицы. Разрешается использовать дополнительный массив. Задание №4(Сортировка массивов) (см. "Сборник задач для начинающего программиста"). Алгоритм: #include <iostream> using std::cout; using std::cin; using std::endl; #include <iomanip> using std::setw; #include <cstdlib> #include <time.h> int max_in_line(int *, int); // Находит максимальный элемент в строке матрицы int main() { const int m = 5, n = 6; // Указываем размеры матирцы int a[m][n]; // Массив, который будет хранить матрицу int *p[m]; // Массив указателей на строки матрицы int s[m]; // Массив, хранящий максимальные элементы int i, j; int *tmp; time_t t; srand((unsigned) time(&t)); cout << "Here is the initial matrix (" << m << " * " << n << "):\n" << endl; // Инициализируем матрицу и тут же ее выводим for(i = 0; i < m ; i++) { for(j = 0; j < n; j++) { a[i][j] = rand() % 100; cout << setw(4) << a[i][j]; } p[i] = &a[i][0]; cout << endl; } cout << endl; cout << "Line # / Largest element\n" << endl; // Поиск и вывод максимальных элементов в каждой строке матрицы for(i = 0; i < m; i++) s[i] = max_in_line(&a[i][0], n); for(i = 0; i < m; i++) cout << setw(4) << i << setw(13) << s[i] << endl; // Сортировка максимальных элементов из каждой строки по невозрастанию методом обмена // и соответствующих этим элементам строк (указателей на эти строки) for(i = 0 ; i < m - 1 ; i ++) for(j = 0; j < m - 1 - i ; j ++) if(s[j] < s[j+1]) { s[j]^=s[j+1]; s[j+1]^=s[j]; s[j]^=s[j+1]; tmp = p[j]; p[j] = p[j+1]; p[j+1] = tmp; } cout << endl; // Вывод на экран максимальных элементов из каждой строки, упорядоченных по невозрастанию cout << "Here is the largest elements in nonincreasing order:\n" << endl; for(i = 0; i < m; i++) cout << setw(4) << s[i] << endl; cout << endl; // Матрица, преобразованная согласно условию cout << "Transformed matrix:\n" << endl; for(i = 0; i < m; i++) { for(j = 0; j < n; j++) cout << setw(4) << *p[i]++; cout << endl; } return 0; } // Передаем функции указатель на каждую строку матрицы, которая является одномерным массивом. int max_in_line(int *p, int n) { int max = 0; for(int i = 0 ; i < n ; i++) { if(*p > max) max = *p; p++; } return max; }
Ключевые слова:
массив, список, поиск максимального элемента
|
|||