C#, Условия заполнения матриц

88
12 февраля 2022, 00:10

[![введите сюда описание изображения][1]][1]Есть 14 вариантов матрицы, для каждого варианта нужно придумать условия по которому матрица будет заполняться, смог первые 2 сделать, дальше никак не могу. Синюю область нужно заполнить, белая пустая. Условия для первых 2 : 1 : i>=j; 2 : i<=j; Код :

 class Program
            {
                public delegate bool MatrixType(int i, int j);
                static int Len;
                Program()
                {
                    Console.Write("Length : ");
                    Len = Int32.Parse(Console.ReadLine());// Creating a Length of all Arrays and Matrixes
                }    
    //Base Matrix
            static object[,] CreateMatrix()
            {
                object[,] arr = new object[Len, Len];
                return arr;
            } 
static object[,] FillMatrix(object[,] Matrix)
        {   
            Random random = new Random();
            for (int i = 0; i < Len; i++)
            {
                for (int j = 0; j < Len; j++)
                {
                    if (j > -i + Len)
                    {
                        Matrix[i, j] = (int)random.Next(1, 20);
                    }
                }
            }
            return Matrix;
        }
 static void PrintMatrixArray(object[,] arr)
        {
            for(int i = 0; i < Len-1; i++ )
            {
                for(int j = 0; j < Len-1; j++)
                {
                    Console.Write("{0,4}", arr[i, j]);
                }
                Console.WriteLine();
            }
        }
  static void Main(string[] args)
        {
            Program pro = new Program();
            Console.WriteLine();
            // PrintArrays();
            PrintMatrixArray(FillMatrix(CreateMatrix()));
        }

Answer 1

Если вы посмотрите внимательно на рисунки, то увидите, что вся синяя зона всегда (за исключением 1 - 4 случаев) формируются пересечением двух прямых (диагоналей матрицы) и условием больше/меньше относительно прямой:

  1. y = x
  2. y = -x + len

x - i

y - j

Все что вам нужно, нарисовать эти две прямые на листочке и посмотреть при каких условиях больше/меньше области будут пересекаться

Зеленая линия - график j = i

Красная линия - график j = -i + len

Серая зона - j > i

Коричневая - j < i

Желтая - j < -i + len

Фиолетовая - j > -i + len

Тем самым вы получите 4 зоны, комбинируя которые вы сможете получить любую фигуру из вашего задания

READ ALSO
Работа windows form

Работа windows form

Есть приложение, в нем обрабатываются большие данные в цикле, если цикл идет достаточно долго то приложение зависает и не обновляется его...

155
Распознавание прав доступа в Windows forms

Распознавание прав доступа в Windows forms

Как в Windows forms можно отличить обычный запуск программы от запуска с правами администратора?

85
Где хранить музыку?

Где хранить музыку?

Я начинаю писать дипломную работу на тему "Стриминговый сервис"Сначала подумал, что было бы круто арендовать веб сервер, на котором буду хранить...

187
Как разместить картинки таким методом? Грид, Флекс-бокс?

Как разместить картинки таким методом? Грид, Флекс-бокс?

Таким образом должны быть размещены таким образом, гридами или флекс-боксами, ну или другим более удобным методом

162