Нарисуйте диагональную линию от верхнего правого угла до нижнего левого, используя вложенный цикл for в консольном приложении c # - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть матрица 5x5, заполненная нулями.

Я собираюсь нарисовать диагональную линию от верхнего правого угла до нижнего левого угла, используя вложенный цикл.

ожидаемый результат :

0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0

мой вывод :

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

мой код:

using System;

namespace practice_04
{
class Program
{
    static void Main(string[] args)
    {
        int[,] array = new int[5, 5];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                array[i, j] = (i == j) ? 1 : 0;

                Console.Write($"{array[i, j]} ");
            }
            Console.WriteLine(Environment.NewLine);
        }
    }
}
}

Я не понимаюкак превратить мой вывод в ожидаемый вывод

Ответы [ 3 ]

2 голосов
/ 08 ноября 2019

Просто небольшая модификация поможет:

array[i, j] = (i == 4 - j) ? 1 : 0;

Для лучшего качества кода я бы предложил использовать размеры массива ниже в коде после его инициализации:

for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array.GetLength(1); j++)

и

array[i, j] = (i == array.GetLength(0) - 1 - j) ? 1 : 0;
1 голос
/ 08 ноября 2019

Маленькая ошибка в цикле for. Прикрепил правильную строку:

for (int j = 4; j >= 0; j--)
{
    array[i, j] = (i == j) ? 1 : 0;

    Console.Write($"{array[i, j]} ");
}

Тогда ваш вывод будет зеркально отображен:

i\j 4 3 2 1 0
 0  0 0 0 0 1
 1  0 0 0 1 0
 2  0 0 1 0 0
 3  0 1 0 0 0
 4  1 0 0 0 0
1 голос
/ 08 ноября 2019

Вы печатаете свой массив следующим образом:

i\j 0 1 2 3 4
 0  0 0 0 0 1
 1  0 0 0 1 0
 2  0 0 1 0 0
 3  0 1 0 0 0
 4  1 0 0 0 0

Поэтому вы хотите i + j == 4 вместо i == j

Так будет выглядеть i+j, если вы нееще убежден:

i\j 0 1 2 3 4
 0  0 1 2 3 4
 1  1 2 3 4 5
 2  2 3 4 5 6
 3  3 4 5 6 7
 4  4 5 6 7 8
...