Переставляя строки и столбцы матрицы, добиться того, чтобы наибольший элемент оказался в левом верхнем углу - C# (197940)
Формулировка задачи:
Дана вещественная матрица размером (N*M). Переставляя её строки и столбцы добиться того что бы наибольший элемент оказался в левом верхнем углу.
Решение задачи: «Переставляя строки и столбцы матрицы, добиться того, чтобы наибольший элемент оказался в левом верхнем углу»
textual
Листинг программы
static void Main(string[] args) { //задаем размерность матрицы: const int n = 5; const int m = 5; int[,] matrix = new int[n, m]; Random rand = new Random(); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) matrix[i, j] = rand.Next(0, 20);//заполняем массив случайными числами Console.WriteLine(); //выводим на консоль полученную матрицу Print(matrix); //сортируем матрицу таким образом, чтобы максимальный элемент оказался первым matrix = Sort(matrix); //отображаем полученную матрицу Print(matrix); Console.WriteLine(); } static int[,] Sort(int[,] matrix) { //получаем размерность матрицы (в данном случае 5 и 5) int n = matrix.GetLength(0), m = matrix.GetLength(1); //задаем два промежуточных массива int[] summ = new int[n]; int[] count = new int[n]; //ищем макс. элемент for (int i = 0; i < n; i++) { int max = matrix[i, 0]; for (int j = 1; j < m; j++) { if (matrix[i, j] > max) max = matrix[i, j]; } //заносим максимум каждой строки в массив summ summ[i] = max; //заносим в count номер строки count[i] = i; } Console.WriteLine(); //создаем новый промежуточный массив int[,] result = new int[n, m]; //используем стандартную сортировку для перетасовки массива count в нужном порядке Array.Sort(summ, count); //переварачиваем массив Array.Reverse(count); //выполняем сортировку строк так, чтобы в первой строке оказался первый //элемент for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) result[i, j] = matrix[count[i], j]; Console.WriteLine(); //выводим промежуточный результат Print(result); //продлываем тоже самое, но для сортировки столбцов. int[] count1 = new int[m]; for (int i = 0; i < m; i++) { summ[i] = result[0, i]; count1[i] = i; } Console.WriteLine(); Array.Sort(summ, count1); Array.Reverse(count1); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) matrix[i, j] = result[i, count1[j]]; return matrix; } //функция для вывода массива на консоль static void Print(int[,] matrix) { for (int i = 0; i <= matrix.GetUpperBound(0); i++) { for (int j = 0; j <= matrix.GetUpperBound(1); j++) { Console.Write(matrix[i, j] + "\t"); } Console.WriteLine(); } Console.WriteLine(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д