Циклический сдвиг строки матрицы в зависимости от чётности минимального элемента - C#
Формулировка задачи:
12. Дана матрица А[m,n]. Если минимальный элемент строки матрицы четный, выполнить циклический сдвиг этой строки вправо, чтобы этот элемент оказался в последнем столбце. Иначе выполнить циклический сдвиг строки влево, чтобы этот элемент оказался в первом столбце.
если можно с комментариями))
Решение задачи: «Циклический сдвиг строки матрицы в зависимости от чётности минимального элемента»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
const int m = 10, n = 5 , x = 20;
Random rnd = new Random();
int[,] A = new int[m, n];
int i, j, min, jMin, temp;
Console.WriteLine("Рандомная матрица");
for (i = 0; i < m; i++)//Выводим матрицу на консоль и одновременно заполняем ее
{
for (j = 0; j < n; j++)
{
Console.Write("{0,4}", A[i, j] = rnd.Next(x));
}
Console.WriteLine();
}
for (i = 0; i < m; i++) //пербираем все строки
{
min = int.MaxValue;
jMin = 0;
for (j = 0; j < n; j++) //ищем миним.эл. строки и его индекс
{
if (A[i, j] < min)
{
min = A[i, j];
jMin = j;
}
}
//реализация циклич.сдвига (rotate)
//смещаем на одну позицию влево каждый элемент ровно стоко раз - какой индекс минимального
//в итоге любой минимальный оказывается крайним слева.
if (min % 2 == 0) //если же min четный то количество сдвигов влево увеличивает на 1
jMin++; //в итоге он оказывается крайним справа
while (jMin>0)
{
temp = A[i, 0]; //значение 1-го элемента строки храним во врем.переменной
for (j = 0; j < n-1; j++)
{
A[i, j] = A[i, j + 1]; //собственно здесь и происходит смешение значений
} //каждого элемента строки строки влево ровно jMin или jMin+1 раз
jMin--;
A[i, n-1] = temp;
}
}
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();
}
}
}