Тема: Вставки, удаления, перестановки в массивах - 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);
        }

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


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

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

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