题目要求:
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
题目思路:
利用while函数嵌套按顺序对第一行,最后一列,最后一行,第一列求值,循环往下求值。先求出所给值的1/2, 若能整除则赋值给t,不能整出则加1后赋值给t,利用t判断while的出口。
细节处理:
若N不能被2整除 需要对方阵最中间单独赋值。
#include<bits/stdc++.h>
using namespace std;
int main()
{ int a[100][100]={0},n,i,N,j,num,c,k,t,m;
while(cin>>m)
{while(m--)
{cin>>N;
n=N-1;j=0;i=0;num=1;k=0;
if(N%2==0) t=N/2;
else t=N/2+1;
while(k<t)
{
c=1;
while(c++!=n+1)
{
a[i][j++]=num++;
}
c=1;
while(c++!=n+1)
{
a[i++][j]=num++;
}
c=1;
while(c++!=n+1)
{
a[i][j--]=num++;
}
c=1;
while(c++!=n+1)
{
a[i--][j]=num++;
}
i=k+1;n-=2;k++;
j=i;
}
if(N%2!=0) a[k-1][k-1]=num;
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
{ if(j==N-1) cout<<a[i][j]<<endl;
else cout<<a[i][j]<<"\t";}
}
cout<<endl;
}
}
return 0;
}
感悟:这道题目在求方阵各个数据的值是要注意理清逻辑,一行一列的求,多多实验,注意细节。