P5731 【深基5.习6】蛇形方阵[c++版]

题目链接

https://www.luogu.com.cn/problem/P5731传送门

题目描述

给出一个不大于 9 的正整数 nn,输出 n×n 的蛇形方阵。

从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

输入格式

输出格式

输入输出样例

输入#1

4

输出#1

  1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

提示

从list[1][1]开始,在右移/下移/左移/上移的过程中,两个判断点:
1. 是否越界,即下一个下标应在 [1,n]之间;
2. 是否为空值,即下一个值应该为0,才可以继续赋值;
都是对下一个数组元素进行赋值,故采用 ++x 的操作。

代码

#include
#include
using namespace std;
int list[20][20] = {
     0};
int main(){
     

    int n,x = 1,y = 0;
    cin >> n;
    int k = 1;
    while(k<=n*n){
     
        while(y < n && list[x][y + 1] == 0) list[x][++y] = k++;
        while(x < n && list[x + 1][y] == 0) list[++x][y] = k++;
        while(y > 1 && list[x][y - 1] == 0) list[x][--y] = k++;
        while(x > 1 && list[x - 1][y] == 0) list[--x][y] = k++;
    }
    for(int i = 1;i <= n;i++){
     
        for(int j = 1;j <= n;j++){
     
            printf("%3d",list[i][j]);
        }
        cout << endl;
    }
}

你可能感兴趣的:(洛谷,算法,c++)