【问题描述】以下是一个5×5阶螺旋方阵。设计一个算法输出该形式的n×n(n<10)阶方阵(顺时针方向旋进)。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
【输入形式】输入n值。
【输出形式】输出螺旋方阵。
【样例输入】输入n(n<10):4
【样例输出】4阶数字方阵如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,j,h,num,y,w,z;
scanf("%d",&n);
int a[n][n];
i=0;
h=0;
num=1;
if(n%2==0)
{
while(i<=n/2&&num<=n*n)
{
for(j=i;j<n-i-1;j++)
{
a[h][j]=num;
num++;
}
for(y=i;y<n-i-1;y++)
{
a[y][j]=num;
num++;
}
for(w=n-i-1;w>i;w--)
{
a[y][w]=num;
num++;
}
for(z=n-i-1;z>i;z--)
{
a[z][w]=num;
num++;
}
h++;
i=i+1;
}
}
if(n%2==1)
{
while(i<=n/2+1&&num<=n*n)
{
for(j=i;j<n-i-1;j++)
{
a[h][j]=num;
num++;
}
for(y=i;y<n-i-1;y++)
{
a[y][j]=num;
num++;
}
for(w=n-i-1;w>i;w--)
{
a[y][w]=num;
num++;
}
for(z=n-i-1;z>i;z--)
{
a[z][w]=num;
num++;
}
h++;
i=i+1;
}
a[n/2][n/2]=n*n;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}