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

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

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

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

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

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication7
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             const int m = 4, n = 12;
  13.             Random rnd = new Random();
  14.             int[,] A = new int[m, n];
  15.             int[] temp = new int[m]; //временный масив для хранаения одного столбца в процессе сдвига
  16.             List<int> list = new List<int>();
  17.             int r; //использ при инициализ матрицы для хранения random-значений
  18.             int i, j, k;  
  19.             int max0, iMax0=-1; //макс. значение и индекс первого столбца
  20.             int  max, iMax=-2, jMax=-1; //макс. значения и их индексы неупорядоченой (правой) части матрицы
  21.             bool flag = true;
  22.             //Заполняем матрицу (по столбцам), в пределах одного столбца значения не повторяются
  23.             Console.WriteLine("Рандомная матрица:");
  24.             for (j = 0; j < n; j++)
  25.             {
  26.                 for (i = 0; i < m; i++)
  27.                 {                  
  28.                     r = rnd.Next(10);
  29.                     foreach (int item in list) //сохраняем значения каждого столбца во временный список
  30.                     {                           //во избежание дублирования их в пределах одного столбца
  31.                         if (item == r)  
  32.                             flag = false;
  33.                     }
  34.                     if (flag)
  35.                     {
  36.                         A[i, j] = r;        
  37.                         list.Add(A[i, j]);  
  38.                     }
  39.                     else
  40.                     {
  41.                         flag = true;
  42.                         i--;
  43.                     }
  44.                 }
  45.                 list.Clear();
  46.             }
  47.             //Выводим матрицу на консоль
  48.             for (i = 0; i < m; i++)
  49.             {
  50.                 for (j = 0; j < n; j++)
  51.                 {
  52.                     Console.Write("{0,4}", A[i, j]);
  53.                 }
  54.                 Console.WriteLine();
  55.             }
  56.             //Находим максимальное для первого (№0) столбца
  57.             max0 = int.MinValue;
  58.             for (i = 0; i < m; i++)
  59.             {
  60.                 if (A[i, 0] > max0)
  61.                 {
  62.                     max0 = A[i, 0];
  63.                     iMax0 = i;
  64.                 }
  65.             }
  66.            
  67.             int j2 = 0; //нумератор для перемещенных столбцов
  68.             for (j = 1; j < n; j++)
  69.             {
  70.                 //находим max в следующем столбце
  71.                 max = int.MinValue;
  72.                 for (i = 0; i < m; i++)
  73.                 {
  74.                     if (A[i,j]>max)
  75.                     {
  76.                         max = A[i, j];
  77.                         iMax = i;
  78.                         jMax = j;
  79.                     }
  80.                 }
  81.                 //если индекс максим элем. текущего столбца совпадает с индексом max первого столбца  
  82.                 if (iMax==iMax0)            
  83.                 {
  84.                     j2++;
  85.                     while (jMax>j2)
  86.                     {
  87.                         for (k = 0; k < m; k++) //используем временный массив temp для обмена значениями
  88.                         {           //первого и последнего столбцов (из необработанной правой части матрицы)
  89.                             temp[k] = (A[k, j2]);
  90.                         }
  91.  
  92.                         for (k = j2; k < n-1; k++)
  93.                         {                          
  94.                             for (i = 0; i < m; i++)
  95.                             {
  96.                                 A[i, k] = A[i, k+1];
  97.                             }
  98.                         }
  99.  
  100.                         for (k = 0; k < m; k++) //из временного массива заносим елементы в последний столбец
  101.                         {
  102.                             A[k, n - 1] = temp[k];
  103.                         }
  104.                         jMax--;
  105.                     }
  106.                     j = j2 + 1;
  107.                 }
  108.             }
  109.             //Вывод результата в консоль
  110.             Console.WriteLine("Результат:");
  111.             for (i = 0; i < m; i++)
  112.             {
  113.                 for (j = 0; j < n; j++)
  114.                 {
  115.                     Console.Write("{0,4}", A[i, j]);
  116.                 }
  117.                 Console.WriteLine();
  118.             }
  119.             Console.ReadLine();
  120.         }
  121.     }
  122. }

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


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

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

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы