实验7-2-9 螺旋方阵(20 分)

实验7-2-9 螺旋方阵(20 分)

所谓“螺旋方阵”,是指对任意给定的$N$,将1到$N×N$的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入$N×N$的方阵里。本题要求构造这样的螺旋方阵。

输入格式:

输入在一行中给出一个正整数$N(\lt 10)$。

输出格式:

输出$N×N$的螺旋方阵。每行$N$个数字,每个数字占3位。

输入样例:

1
5

输出样例:

1
2
3
4
5
 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<stdio.h>
#define SIZE 10


int main()
{
int a[SIZE][SIZE]={0};
int N;
scanf("%d",&N);

//每条边的下标在x,y上的增量
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

int x=0,y=0,nx,ny,i,k=0; //k用来表示边,k=0,1,2,3 分别代表上,右,下,左

for(i=0;i<N*N;i++)
{
a[x][y]=i+1;
nx=x+dx[k]; //下一个坐标的位置
ny=y+dy[k];

if(nx<0 || nx==N || ny<0 || ny==N || a[nx][ny]!=0) //下标越界或下标上已经赋值,转变方向
{
k=(k+1)%4;
nx=x+dx[k];
ny=y+dy[k];
}

x=nx;
y=ny;
}

int j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×