1 条题解

  • 0
    @ 2025-10-8 16:48:16

    scy视频

    #include <bits/stdc++.h>
    using namespace std;
     
    int dx[4] = {0, 1, 1, -1};
    int dy[4] = {1, -1, 0, 1};
    //0方向:右,1方向:左下,2方向:下,3方向:右上
     
    int a[22][22];
    int main()
    {
        int n;
        scanf("%d", &n);
        memset(a, 0, sizeof(a)); //a全部为0,然后四周填-1
        for (int i = 0; i <= n + 1; i++)
        {
            a[0][i] = a[n + 1][i] = -1;
            a[i][0] = a[i][n + 1] = -1;
        }
        //到此准备好了a数组,下来开始填
        a[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];
            if (t == 0 || t == 2) //注:向下和向右只走一步就要换方向
                t++;
            a[x][y] = k; //填数字
            k++;         //准备下一个数字
        }
        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
    43
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    547
    已通过
    178
    上传者