在Array中交换对角元素 - C#

时间:2017-04-16 19:29:18

标签: c# matrix diagonal

我想知道如何用2D数组编写程序来交换主对角线的元素和辅助对角线然后打印结果 像这样

3 2 7
4 5 3
2 8 9

结果如下所示:

7 2 3
4 5 3
9 8 2

1 个答案:

答案 0 :(得分:0)

实际上这不是一个非常具体的问题,但由于我没有看到你陷入困境的部分,我会尝试向你解释一个完整的例子:

static int[,] GetDiagonallySwitched(int[,] oldMatrix)
{
    var newMatrix = (int[,])oldMatrix.Clone();

    for (var i = 0; i < oldMatrix.GetLength(0); i++)
    {
        var invertedI = oldMatrix.GetLength(0) - i - 1;
        newMatrix[i, i] = oldMatrix[i, invertedI];
        newMatrix[i, invertedI] = oldMatrix[i, i];
    }
    return newMatrix;
}

首先,我克隆旧矩阵,因为一些值实际上保持不变。然后我将值从左侧切换到右侧。我用invertedI来做这个,基本上是我来自另一边 - 所以最后交叉是镜像的,好像线路已经切换了。这适用于任何大小的矩阵。

对于打印:如果你真的想以粗体打印它,你必须在WinForms中使用RTB,但我不认为这是你问题的一部分。否则,您可以使用此代码打印矩阵:

static void Print(int[,] switched)
{
    for (var y = 0; y < switched.GetLength(0); y++)
    {
        for (var x = 0; x < switched.GetLength(1); x++)
            Console.Write(switched[y, x]);
        Console.WriteLine();
    }
}

我希望我能帮到你。