1 条题解

  • 1
    @ 2023-6-8 21:54:48
    #include<bits/stdc++.h>
    using namespace std;
    int dir[4][2] = {{1,0},{0,-1},{-1,0},{0,1}};//方向数组 
    int main()
    {
        int a[25][25] = {}, k = 1, n, fx, fy, d = 0, x, y;//fx, fy当前焦点位置 x,y下一个位置  d:方向 
        cin >> n;
        fx = 1, fy = n;
        while(k <= n*n)
        {
            a[fx][fy] = k++; // 赋值 
            x = fx + dir[d][0], y = fy + dir[d][1]; //下一个位置 
            if(a[x][y] != 0 || x > n || x < 1 || y > n || y < 1)//如果新位置上已经有值了或移出了二维数组范围
                d = (d + 1) % 4;//变换方向 
            fx += dir[d][0], fy += dir[d][1];//更新焦点位置 
        }
        for(int i = 1; i <= n; ++i)
        {
            for(int j = 1; j <= n; ++j)
                cout << a[i][j] << ' ';
            cout << endl;
        }
        return 0; 
    }
    
    • 1

    信息

    ID
    215
    时间
    1000ms
    内存
    125MiB
    难度
    10
    标签
    递交数
    6
    已通过
    3
    上传者