Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
Input
输入第一行为整数m(0<m<10),代表有m组输入;
接下来是m行数据,每行输入一个n(0<n<11)。
Output
按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以'\t'分隔)
两个输出方阵之间输出一个空行。
Sample Input
Sample Output
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
Hint
Source #include <stdio.h>
#include <stdlib.h>
int y,x,a[20][20],z;
int ltr(int flag);
int utd(int flag);
int rtl(int flag);
int dtu(int flag);
int main()
{
int flag,m,i,n,j,k;
scanf("%d",&m);
for(i=0;i<=m-1;i++)
{
x=0;y=0;z=1;
scanf("%d",&n);
flag=n-1;
for(x=0;x<=n-2;z++,x++)
{
a[y][x]=z;
}
utd(flag);
for(j=0;j<=n-1;j++)
{
for(k=0;k<=n-1;k++)
{
if(k==n-1)
{
printf("%d\n",a[j][k]);
}
else
{
printf("%d\t",a[j][k]);
}
}
}
printf("\n");
}
return 0;
}
int utd(int flag)
{
int i;
for(i=1;i<=flag;y++,z++,i++)
{
a[y][x]=z;
}
rtl(flag);
return 0;
}
int rtl(int flag)
{
int i;
for(i=1;i<=flag;x--,z++,i++)
{
a[y][x]=z;
}
flag--;
if(flag==0)
{
a[y][x]=z;
return 0;
}
dtu(flag);
return 0;
}
int dtu(int flag)
{
int i;
for(i=1;i<=flag;y--,z++,i++)
{
a[y][x]=z;
}
ltr(flag);
return 0;
}
int ltr(int flag)
{
int i;
for(i=1;i<=flag;x++,z++,i++)
{
a[y][x]=z;
}
flag--;
if(flag==0)
{
a[y][x]=z;
return 0;
}
utd(flag);
return 0;
}