You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中顺时针旋转二维矩阵:求补全反转部分代码

解决C#顺时针旋转二维矩阵的问题

首先,你的代码存在两个关键问题:

  • 转置逻辑重复交换:原转置循环中i和j都从0开始,会导致每个元素对被交换两次,最终矩阵没有变化。
  • 缺少正确的反转步骤:顺时针旋转90度的标准流程是「转置矩阵 → 反转每一行」,同时打印逻辑需要对应调整。

修正后的完整代码

static void RotateMatrix()
{
    // 待旋转的二维数组
    int[,] matrix = new int[,] 
    {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // 1. 正确转置矩阵:只交换上三角和下三角元素,避免重复交换
    int n = matrix.GetLength(0);
    for (int i = 0; i < n; i++)
    {
        // j从i+1开始,跳过对角线元素和已交换过的位置
        for (int j = i + 1; j < n; j++)
        {
            var temp = matrix[i, j];
            matrix[i, j] = matrix[j, i];
            matrix[j, i] = temp;
        }
    }

    // 2. 反转每一行,完成顺时针90度旋转
    for (int i = 0; i < n; i++)
    {
        // 交换行内左右对称的元素
        for (int j = 0; j < n / 2; j++)
        {
            var temp = matrix[i, j];
            matrix[i, j] = matrix[i, n - 1 - j];
            matrix[i, n - 1 - j] = temp;
        }
    }

    // 3. 按行打印旋转后的矩阵
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            Console.Write(matrix[i, j] + " ");
        }
        Console.WriteLine();
    }
}

步骤解释

  1. 正确转置:
    转置时让j从i+1开始遍历,只交换矩阵中(i,j)和(j,i)的元素(跳过对角线和已交换的位置),得到转置后的矩阵:

    1 4 7
    2 5 8
    3 6 9
    
  2. 反转每一行:
    对转置后的每一行,交换行内第j个和第n-1-j个元素(左右对称交换),得到最终旋转后的矩阵:

    7 4 1
    8 5 2
    9 6 3
    
  3. 按行打印:
    调整打印逻辑为按行输出,确保结果和期望一致。

内容的提问来源于stack exchange,提问作者BranditoLmao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:24:27