Циклический сдвиг столбцов матрицы - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д