Тема: Вставки, удаления, перестановки в массивах - C#
Формулировка задачи:
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине – в позиции (2,2), следующий по величине – в позиции (3,3) и т.д., заполнив таким образом всю главную диагональ.
(если не сложно, напишите комментарии с пояснениями, спасибо)
Решение задачи: «Тема: Вставки, удаления, перестановки в массивах»
textual
Листинг программы
static void Main(string[] args) { //Напечатать все последовательности длины k из чисел 1..n Console.WriteLine("Введите размер матрицы: "); int n = int.Parse(Console.ReadLine()); int[,] arr = new int[n, n]; Random rnd = new Random(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { arr[i, j] = rnd.Next(0, 100); Console.Write(arr[i, j] + " "); } Console.WriteLine(); } int maxValue=0; int ch =-1; int ch2 = -1; int[] maxArr = new int[n]; for (int i = 0; i < n; i++) { maxValue = arr.Cast<int>().Max(); // максимальный элемент матрицы ch = (int)Char.GetNumericValue(finder(arr, maxValue)[0]); // первый индекс максимального элемента ch2 = (int)Char.GetNumericValue(finder(arr, maxValue)[1]); // второй индекс максимального лемента maxArr[i] = arr[ch, ch2]; // новый одномерный массив из максимальных элементов arr[ch, ch2] = 0; // для "упрощения" заменяем места где когда-то были максимлаьные элементы на нули } int l = 0; for (int i = 0; i < n; i++) // цикл для того что бы заменить нулевые элементами на элементы стоящие на диагонали { for (int j = 0; j < n; j++) { if (arr[i, j] == 0) { arr[i, j] = arr[l, l]; //arr[l,l] и есть элементы главной матрицы l++; } } } int m = 0; for (int i = 0; i < n; i++) // цикл для заполнения главной диагонали максимальными элементами { arr[m, m] = maxArr[i]; // arr[m, m] есть нечто иное как элемент находящийся на главной диагонали m++; } Console.WriteLine("Новая матрица: "); for (int i = 0; i < n; i++) // вывод новго массива на экран { for (int j = 0; j < n; j++) { Console.Write(arr[i, j] + " "); } Console.WriteLine(); } Console.ReadKey(); } static public string finder(int[,] arr,int maxValue) // этот метод будет нам возвращать индексы максимального элемента { int indexI = 0; int indexJ = 0; double n = Math.Sqrt(arr.Length); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (arr[i, j] == maxValue) { indexI = i; indexJ = j; } } } return string.Format("{0}{1}",indexI,indexJ); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д