Description
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。

请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
Input
输入第一行为整数m(0<m<10),代表有m组输入;
接下来是m行数据,每行输入一个n(0<n<11)。
接下来是m行数据,每行输入一个n(0<n<11)。
Output
按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以'\t'分隔)
两个输出方阵之间输出一个空行。
两个输出方阵之间输出一个空行。
Sample Input
1 4
Sample Output
1 2 3 412 13 14 511 16 15 610 9 8 7
代码:
#if 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m , a[20][20] ;
cin>> m ;
int ax[]={0,1,0,-1} ,ay[] ={1,0,-1,0 } ; //控制方向
while (m--)
{
int n;
cin>>n;
memset(a,0,sizeof(a)) ;
int nx=0 , ny=0 ,x=0,y=0,k=0;
for(int i=0 ;i<n*n ;i++)
{
a[x][y] =i+1 ;
nx = x+ ax[k] ;
ny= y+ay[k] ;
if(nx==n||nx<0||ny==n||ny<0||a[nx][ny]!=0)
{
k=(k+1)%4 ;
nx= x+ ax[k] ;
ny =y +ay[k] ;
}
x= nx ; y=ny ; //确定 要去的 方向
}
for (int i=0 ;i< n ;i++)
{
for(int j=0 ;j< n ;j++)
cout<< a[i][j] <<" \t" ;
cout<<endl;
}
}
}
int m , a[20][20] ;
cin>> m ;
int ax[]={0,1,0,-1} ,ay[] ={1,0,-1,0 } ; //控制方向
while (m--)
{
int n;
cin>>n;
memset(a,0,sizeof(a)) ;
int nx=0 , ny=0 ,x=0,y=0,k=0;
for(int i=0 ;i<n*n ;i++)
{
a[x][y] =i+1 ;
nx = x+ ax[k] ;
ny= y+ay[k] ;
if(nx==n||nx<0||ny==n||ny<0||a[nx][ny]!=0)
{
k=(k+1)%4 ;
nx= x+ ax[k] ;
ny =y +ay[k] ;
}
x= nx ; y=ny ; //确定 要去的 方向
}
for (int i=0 ;i< n ;i++)
{
for(int j=0 ;j< n ;j++)
cout<< a[i][j] <<" \t" ;
cout<<endl;
}
}
}
#endif