Переставляя строки и столбцы матрицы, добиться того, чтобы наибольший элемент оказался в левом верхнем углу - C# (197940)

Узнай цену своей работы

Формулировка задачи:

Дана вещественная матрица размером (N*M). Переставляя её строки и столбцы добиться того что бы наибольший элемент оказался в левом верхнем углу.

Решение задачи: «Переставляя строки и столбцы матрицы, добиться того, чтобы наибольший элемент оказался в левом верхнем углу»

textual
Листинг программы
  1.         static void Main(string[] args)
  2.         {
  3.             //задаем размерность матрицы:
  4.             const int n = 5;
  5.             const int m = 5;
  6.             int[,] matrix = new int[n, m];
  7.             Random rand = new Random();
  8.             for (int i = 0; i < n; i++)
  9.                 for (int j = 0; j < m; j++)
  10.                     matrix[i, j] = rand.Next(0, 20);//заполняем массив случайными числами
  11.             Console.WriteLine();
  12.             //выводим на консоль полученную матрицу
  13.             Print(matrix);
  14.             //сортируем матрицу таким образом, чтобы максимальный элемент оказался первым
  15.             matrix = Sort(matrix);
  16.             //отображаем полученную матрицу
  17.             Print(matrix);
  18.             Console.WriteLine();
  19.         }
  20.         static int[,] Sort(int[,] matrix)
  21.         {
  22.             //получаем размерность матрицы (в данном случае 5 и 5)
  23.             int n = matrix.GetLength(0), m = matrix.GetLength(1);
  24.             //задаем два промежуточных массива
  25.             int[] summ = new int[n];
  26.             int[] count = new int[n];
  27.             //ищем макс. элемент
  28.             for (int i = 0; i < n; i++)
  29.             {
  30.                 int max = matrix[i, 0];
  31.                 for (int j = 1; j < m; j++)
  32.                 {
  33.                     if (matrix[i, j] > max)
  34.                         max = matrix[i, j];
  35.                 }
  36.                 //заносим максимум каждой строки в массив summ
  37.                 summ[i] = max;
  38.                 //заносим в count номер строки
  39.                 count[i] = i;
  40.  
  41.             }
  42.             Console.WriteLine();
  43.             //создаем новый промежуточный массив
  44.             int[,] result = new int[n, m];
  45.             //используем стандартную сортировку для перетасовки массива count в нужном порядке
  46.             Array.Sort(summ, count);
  47.             //переварачиваем массив
  48.             Array.Reverse(count);
  49.             //выполняем сортировку строк так, чтобы в первой строке оказался первый
  50.             //элемент
  51.             for (int i = 0; i < n; i++)
  52.                 for (int j = 0; j < m; j++)
  53.                     result[i, j] = matrix[count[i], j];
  54.             Console.WriteLine();
  55.  
  56.             //выводим промежуточный результат
  57.              Print(result);
  58.             //продлываем тоже самое, но для сортировки столбцов.
  59.             int[] count1 = new int[m];
  60.             for (int i = 0; i < m; i++)
  61.             {
  62.                 summ[i] = result[0, i];
  63.                 count1[i] = i;
  64.             }
  65.             Console.WriteLine();
  66.             Array.Sort(summ, count1);
  67.             Array.Reverse(count1);
  68.             for (int i = 0; i < n; i++)
  69.                 for (int j = 0; j < m; j++)
  70.                     matrix[i, j] = result[i, count1[j]];
  71.  
  72.             return matrix;
  73.         }
  74.         //функция для вывода массива на консоль
  75.         static void Print(int[,] matrix)
  76.         {
  77.             for (int i = 0; i <= matrix.GetUpperBound(0); i++)
  78.             {
  79.                 for (int j = 0; j <= matrix.GetUpperBound(1); j++)
  80.                 {
  81.                     Console.Write(matrix[i, j] + "\t");
  82.                 }
  83.                 Console.WriteLine();
  84.             }
  85.             Console.WriteLine();
  86.         }
  87.  
  88.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы