Расположение по диагонали в двухмерном массиве - C#
Формулировка задачи:
Есть двухмерный массив. Заполнил его случайными числами. Необходимо путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы её максимальный элемент находился в левом верхнем углу, следующий по величине – в позиции (2, 2), следующий по величине – в позиции (3, 3) и т. д., заполнив, таким образом, всю главную диагональ. Как это сделать, не могу понять =(
namespace Kon2_Pab2
{
class Program
{
static void Main(string[] args)
{
int[,] A;
int N;
Console.WriteLine("Cколько строк?");
N = Convert.ToInt16(Console.ReadLine());
int M;
Console.WriteLine("Cколько столбцов?");
M = Convert.ToInt16(Console.ReadLine());
A = new int[N, M];
Random r = new Random();
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
A[i, j] = r.Next(-100, 100);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
Console.Write(A[i, j] + " ");
Console.WriteLine();
}; Console.ReadLine();
}
}
}Решение задачи: «Расположение по диагонали в двухмерном массиве»
textual
Листинг программы
int[,] kv = {{1,2,3},
{4,5,6},
{7,8,9}};
List<int> ks= new List<int>(kv.Length);
//переносим массив в LIst
foreach (int i in kv) ks.Add(i);
//сортируем LIst
ks = ks.OrderByDescending(x => x).ToList();
int kt = kv.GetLength(0);
//выставляем диагональ
for (int i=0; i < kt; i++)
kv[i, i] = ks.ElementAt(i);
int kt1 = 0;
//заполняем остальные позиции
for (int i = 0; i < kt; i++)
for (int j = 0; j < kt; j++)
{
if (i == j) continue;
kv[i, j] = ks.ElementAt(kt+kt1++);
}
//в исходном массиве на главной диагонали выставлены максимальные элементы