AcWing.753

196 阅读1分钟

输入整数 N,输出一个 N 阶的回字形二维数组。 数组的最外层为 1 ,次外层为 2 ,以此类推。

输入格式

输入包含多行,每行包含一个整数 N

当输入行为 N=0

时,表示输入结束,且该行无需作任何处理。

输出格式

对于每个输入整数 N

输出一个满足要求的 N 阶二维数组。

每个数组占 N 行,每行包含 N 个用空格隔开的整数。 每个数组输出完毕后,输出一个空行。

数据范围

0≤N≤100

输入样例:

1
2
3
4
5
0

输出样例:

1

1 1
1 1

1 1 1
1 2 1
1 1 1

1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

思路是抽象为xy坐标系 在某一点上 该点到上下左右四个边界的距离中取最小值就是他想要你输出的答案

放代码

#include<iostream>
using namespace std;
int a[105][105];
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int up = i,down = n-i+1, left = j,right = n-j+1;
                cout<<min( min(up,down) , min(left,right) )<<" ";
            }
            cout<<endl;
        }
        cout<<endl;
    }
return 0;
}