Циклический сдвиг столбцов матрицы - C#

Узнай цену своей работы

Формулировка задачи:

10. Дана матрица А[m,n], выполнить циклический сдвиг всех ее столбцов, начиная со второго, так, чтобы максимальный элемент каждого столбца оказался в той же строке, что и максимальный элемент первого столбца. если можно с комментариями))

Решение задачи: «Циклический сдвиг столбцов матрицы»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            const int m = 4, n = 12; 
            Random rnd = new Random();
            int[,] A = new int[m, n];
            int[] temp = new int[m]; //временный масив для хранаения одного столбца в процессе сдвига
            List<int> list = new List<int>();
            int r; //использ при инициализ матрицы для хранения random-значений
            int i, j, k;  
            int max0, iMax0=-1; //макс. значение и индекс первого столбца
            int  max, iMax=-2, jMax=-1; //макс. значения и их индексы неупорядоченой (правой) части матрицы
            bool flag = true;
            //Заполняем матрицу (по столбцам), в пределах одного столбца значения не повторяются
            Console.WriteLine("Рандомная матрица:");
            for (j = 0; j < n; j++)
            {
                for (i = 0; i < m; i++)
                {                  
                    r = rnd.Next(10);
                    foreach (int item in list) //сохраняем значения каждого столбца во временный список
                    {                           //во избежание дублирования их в пределах одного столбца
                        if (item == r)  
                            flag = false;
                    }
                    if (flag)
                    {
                        A[i, j] = r;        
                        list.Add(A[i, j]);  
                    }
                    else
                    {
                        flag = true;
                        i--;
                    }
                }
                list.Clear();
            }
            //Выводим матрицу на консоль
            for (i = 0; i < m; i++) 
            {
                for (j = 0; j < n; j++)
                {
                    Console.Write("{0,4}", A[i, j]);
                }
                Console.WriteLine();
            }
            //Находим максимальное для первого (№0) столбца
            max0 = int.MinValue;
            for (i = 0; i < m; i++)
            {
                if (A[i, 0] > max0)
                {
                    max0 = A[i, 0];
                    iMax0 = i;
                }
            }
            
            int j2 = 0; //нумератор для перемещенных столбцов
            for (j = 1; j < n; j++) 
            {
                //находим max в следующем столбце
                max = int.MinValue;
                for (i = 0; i < m; i++) 
                {
                    if (A[i,j]>max)
                    {
                        max = A[i, j];
                        iMax = i;
                        jMax = j;
                    }
                }
                //если индекс максим элем. текущего столбца совпадает с индексом max первого столбца  
                if (iMax==iMax0)            
                {
                    j2++;
                    while (jMax>j2)
                    {
                        for (k = 0; k < m; k++) //используем временный массив temp для обмена значениями
                        {           //первого и последнего столбцов (из необработанной правой части матрицы)
                            temp[k] = (A[k, j2]);
                        }
 
                        for (k = j2; k < n-1; k++) 
                        {                          
                            for (i = 0; i < m; i++)
                            {
                                A[i, k] = A[i, k+1];
                            }
                        }
 
                        for (k = 0; k < m; k++) //из временного массива заносим елементы в последний столбец
                        {
                            A[k, n - 1] = temp[k];
                        }
                        jMax--;
                    }
                    j = j2 + 1;
                }
            }
            //Вывод результата в консоль
            Console.WriteLine("Результат:"); 
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {
                    Console.Write("{0,4}", A[i, j]);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
}

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


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

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

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