Помогите с решением массива на 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;