Помогите с решением массива на C#

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2з
{
    class Program
    {
        static void Main(string[] args)
        {
            int n, m;
            n = Convert.ToInt32(Console.ReadLine());
            m = Convert.ToInt32(Console.ReadLine());
            int[,] a = new int[n, m];
            Random random = new Random();
            Console.WriteLine("Исходная матрица: ");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    a[i, j] = random.Next(100);
                    Console.Write("{0} ", a[i, j]);
                }
                Console.WriteLine("");
            }

            Console.WriteLine("Полученная матрица: ");
            //вывод полученной матрицы
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    Console.Write("{0} ", a[i, j]);
                }
                Console.WriteLine("");
            }
        }
    }
}

Ответы (1 шт):

Автор решения: Aqua

Для начала, мы находим максимальное значение из всего массива, после ищем его координаты, и меняем поочерёдно строки и столбцы с нужным нам значением, и нулевыми.

int collSize, rowSize;
collSize = Convert.ToInt32(Console.ReadLine());
rowSize = Convert.ToInt32(Console.ReadLine());
int[,] array = new int[collSize, rowSize];
Random random = new Random();
Console.WriteLine("Исходная матрица: ");
for (int i = 0; i < collSize; i++) //Цикл заполнения матрицы случайными значениями
{
    for (int j = 0; j < rowSize; j++)
    {
        array[i, j] = random.Next(100);
        Console.Write("{0} ", array[i, j]);
    }
    Console.WriteLine("");
}
var arr = array.Cast<int>().ToList(); //Делаем список из нашего массива, что бы можно было получить доступ к 
                                      //К методам IEnumerable
int max = arr.Max();//Максимальное значение из списка
int maxCol = 0, maxRow = 0; //Переменные для хранения координат максимального значения
for (int i = 0; i < collSize; i++) //Поиск координат
{
    for (int j = 0; j < rowSize; j++)
    {
        if (array[i,j] == max) //Если значение координат при переборе равно максимальному, заносим их в переменные
        {
            maxCol = i;
            maxRow = j;
        }
    }
}
for (int i = 0; i < collSize; i++) //Цикл для перестановки данных со столбца с максимальным значением и [0;i]
{
    int fromMaxColl = array[i, maxRow];//Стандартное перемещение значений 2 переменных местами
    array[i, maxRow] = array[i, 0];
    array[i, 0] = fromMaxColl;
}
for (int i = 0; i < collSize; i++)//Аналогичный цикл для смены порядка строк c максимальным значением и [i;0]
{
    int fromMaxRow = array[maxCol, i];//Стандартное перемещение значений 2 переменных местами
    array[maxCol, i] = array[0, i];
    array[i,0] = fromMaxRow;
}

P.S. Так же не забудьте в начале документа прописать: using System.Linq;

→ Ссылка