【问题标题】:How could I add the values of a matrix int[,] diagonally from bottomleft, to topright?如何将矩阵 int[,] 的值从左下角对角线添加到右上角?
【发布时间】:2010-03-03 15:06:05
【问题描述】:

如何将矩阵 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];
            }
        }
    }
}

【问题讨论】:

    标签: c# matrix


    【解决方案1】:

    理解这一点的关键是if 声明:

    if (f == columnas - c - 1)
    

    两个嵌套循环遍历行(使用f 作为索引)和每一行遍历列(使用c 作为索引)。

    所以每次迭代,你测试行号(即f)是否等于反转的列号(即从总列数中减去c - @987654327 @)。你测试列号反转的原因是因为你想从左下到右上添加,这与从右上到左下添加相同。

    需要注意的是,矩阵对角线仅对方阵有意义,这意味着列数需要与行数相同(在您的算法中 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)

    【讨论】:

      【解决方案2】:

      不需要双循环。

      m x m 矩阵:

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

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-17
        • 1970-01-01
        • 2014-12-23
        相关资源
        最近更新 更多