1 条题解

  • -1
    @ 2025-10-8 16:48:19

    scy视频

    #include <bits/stdc++.h>
    using namespace std;
     
    int dx[4] = {1, 0, -1, 0}; //可以用花括号初始化数组
    int dy[4] = {0, 1, 0, -1};
    //dx和dy数组用于控制方向,0方向:下,1方向:右,2方向:上,3方向:左
     
    int a[22][22]; //把所有的数填到二维数组,最后输出二维数组a
    int main()
    {
        int n;scanf("%d", &n);
        
        //第一步: 初始化 二维数组a,中间区域为0,四周边框为-1 
        memset(a, 0, sizeof(a)); //memset为初始化所有格子为0,0表示可以格子还没填数
        for (int i = 0; i <= n + 1; i++)
        {
            a[0][i] = a[n + 1][i] = -1; //先把第0行和第n+1行填-1
            a[i][0] = a[i][n + 1] = -1; //先把第0列和第n+1列填-1
        }
        
        //第二步:填写 a数组的中间区域 
        a[1][1] = 1;                    //一开始第一行第一列的格子填1
        int x = 1, y = 1, k = 2, t = 0; //x和y表示当前位置,k表示即将准备要填的数字,t表示现在前进的方向(方向0~3)
        while (k <= n * n)
        {
            while (a[x + dx[t]][y + dy[t]] != 0) //预先评估按原来的方向走的下个格子是否为0,不为0就换方向
            {
                t++; //碰到不为0的格子,就换个方向
                if (t == 4)
                    t = 0; //如果方向为4,那么就变成0,以达到方向循环的效果
            }
            //到这里,说明此时的 a[x + dx[t]][y + dy[t]] 等于0,否则无法退出上面的while;
            x = x + dx[t];
            y = y + dy[t];
            a[x][y] = k; //填数字
            k++;         //准备下一个数字
        }
        
        //第三步:打印a数组的中间区域 
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
                printf("%4d", a[i][j]);
            printf("\n");
        }
        return 0;
    }
    
    • 1

    【C++语言:模拟】螺旋矩阵(视频)

    信息

    ID
    42
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    851
    已通过
    202
    上传者