螺旋方陣
Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裏^_^
題目描述
請給出一個程序,對於任意的輸入n(0<n<11),輸出按照上面規律所獲得的n×n的螺旋方陣。
輸入
接下來是m行數據,每行輸入一個n(0<n<11)。
輸出
兩個輸出方陣之間輸出一個空行。
示例輸入
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;
}