Переставляя строки и столбцы матрицы, добиться того, чтобы наибольший элемент оказался в левом верхнем углу - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д