题目描述
在一个NN的方阵中,填入1,2,……NN个数,并要求构成如下的格式:
例如:
N=5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
N=6
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6
输入
每个测试文件只包含一组测试数据,每组输入一个N。
输出
输出构成的方阵。
样例输入
5
样例输出
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
源程序
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[50][50]={0};
int n,i,j,x,y,total=0,x1,y1,x2,y2,kase1=0,kase2=0;
//设置四个边界,当循环到边界时转向填充数据
scanf("%d",&n);
x=n;
y=1;
x1=1;
x2=n;
y1=1;
y2=n;
while(total<n*n){
while(y<=y2){
a[x][y]=++total;
y++;
}
y--;
x2--;
x--;
while(x>=x1){
a[x][y]=++total;
x--;
}
x++;
y2--;
y--;
while(y>=y1){
a[x][y]=++total;
y--;
}
y++;
x1++;
x++;
while(x<=x2){
a[x][y]=++total;
x++;
}
x--;
y1++;
y++;
}
for(i=1;i<=n;i++){
if(kase1){
printf("\n");
}
kase1=1;
kase2=0;
for(j=1;j<=n;j++){
if(kase2){
printf(" ");
}
kase2=1;
printf("%d",a[j][i]);
}
}
return 0;
}