How could I add the values of a matrix int[,] diagonally from bottomleft, to topright?

我与影子孤独终老i 提交于 2019-12-25 10:27:20

问题


How could I add the values of a matrix int[,] diagonally from bottomleft, to topright?

I'm trying to help out a friend understand this but even I don't really get what they're doing here.

Here's the method I'm trying to explain to him:

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];
            }
        }
    }
}

回答1:


The key to understanding this is the if statement:

if (f == columnas - c - 1)

The two nested loops iterate over rows (using f as an index) and for each row, over columns (using c as an index).

So each iteration, you test if the row number (that is f) is equal to the column number reversed (that is c subtracted from the total number of columns - columnas). The reason you test for the column number reversed is because you want to add from bottom left to top right, which is the same as adding from top-right to bottom left.

One thing to note is that a matrix diagonal only makes sense for a square matrix which means the number of columns needs to be same as the number of rows (in your algorithm filas should equal columnas).

So, assuming a 5x5 matrix:

Row 0 (f = 0) --> Column 4 (c = 5 - 0 - 1)
Row 1 (f = 1) --> Column 3 (c = 5 - 1 - 1)
Row 2 (f = 2) --> Column 2 (c = 5 - 2 - 1)
Row 3 (f = 3) --> Column 1 (c = 5 - 3 - 1)
Row 4 (f = 4) --> Column 0 (c = 5 - 4 - 1)




回答2:


There's no need for a double loop.

m x m matrix:

for(int rowNr = 0; rowNr < m; rowNr++)
{
   int colNr = m - rowNr - 1;
   Addition += matrix[rownr, colnr];
}


来源:https://stackoverflow.com/questions/2372321/how-could-i-add-the-values-of-a-matrix-int-diagonally-from-bottomleft-to-top

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!