Как я могу добавить значения матрицы int [,] по диагонали от нижнего левого к верхнему правому? - PullRequest
0 голосов
/ 03 марта 2010

Как мне добавить значения матрицы int [,] по диагонали от нижнего левого к верхнему правому?

Я пытаюсь помочь другу понять это, но даже я не понимаю, что они здесь делают.

Вот метод, который я пытаюсь объяснить ему:

public void AddDiagonal()
{
    int Addition;

    for (int f = 0; f < filas; f++)
    {
        for (int c = 0; c < columnas; c++)
        {
            if (f == columnas - c - 1)
            {
                Addition += matriz[f, c];
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Ключом к пониманию является утверждение if:

if (f == columnas - c - 1)

Два вложенных цикла выполняют итерацию по строкам (используя f в качестве индекса) и для каждой строки по столбцам (используя c в качестве индекса).

Таким образом, на каждой итерации вы проверяете, равен ли номер строки (то есть f) номеру столбца , обратному (то есть c вычитается из общего числа столбцов - columnas ). Причина, по которой вы проверяете номер столбца в обратном направлении, заключается в том, что вы хотите добавить снизу слева вверху справа, что аналогично добавлению сверху вниз справа налево.

Следует отметить, что диагональ матрицы имеет смысл только для квадратной матрицы, что означает, что число столбцов должно быть таким же, как и количество строк (в вашем алгоритме filas должно равняться columnas).

Итак, предполагая матрицу 5x5:

Строка 0 (f = 0) -> Столбец 4 (c = 5 - 0 - 1)
Строка 1 (f = 1) -> столбец 3 (c = 5 - 1 - 1)
Строка 2 (f = 2) -> столбец 2 (c = 5 - 2 - 1)
Строка 3 (f = 3) -> столбец 1 (c = 5 - 3 - 1)
Строка 4 (f = 4) -> столбец 0 (c = 5 - 4 - 1)

0 голосов
/ 03 марта 2010

Двойная петля не нужна.

м х м матрица:

for(int rowNr = 0; rowNr < m; rowNr++)
{
   int colNr = m - rowNr - 1;
   Addition += matrix[rownr, colnr];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...