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

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


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

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

13   голосов , оценка 4.308 из 5
Похожие ответы