螺旋方阵
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
n×n的螺旋方阵当n=5和n=3时分别是如下的形式
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。
输入
输入第一行为整数m(0<m<10),代表有m组输入;
接下来是m行数据,每行输入一个n(0<n<11)。
接下来是m行数据,每行输入一个n(0<n<11)。
输出
按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以'\t'分隔)
两个输出方阵之间输出一个空行。
两个输出方阵之间输出一个空行。
示例输入
1
4
示例输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include <cstdio> #include <iostream> #include <cstring> #include <cstdlib> using namespace std; int main() { int j=0,i=0; int b,c=1; int a[100][100]={0}; int n,n1,n2,num,count=1; while(~scanf("%d",&n2)) { while(n2--) { scanf("%d",&n); count=1; j=0; i=0; num=n-1;//num表示每层每行(或每列)需要几次赋值 if(n%2>0) n1=n/2+1; else n1=n/2;//n1表示螺旋方阵有几层 for(b=0;b<n1;b++) { c=1; while(c++!=num+1)//上行的操作 { a[i][j++]=count++; } c=1; //printf("%d\n",i); while(c++!=num+1)//右列的操作 { a[i++][j]=count++; } c=1; while(c++!=num+1)//下行的操作 { a[i][j--]=count++; } c=1; while(c++!=num+1)//左列的操作 { a[i--][j]=count++; } i=b+1; j=i; num-=2; } if(n%2!=0) a[b-1][b-1]=count; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(j==n-1) printf("%d\n",a[i][j]); else printf("%d\t",a[i][j]); } printf("\n"); } } return 0; }