蛇形填数
这个代码参照刘汝佳著的《算法竞赛入门经典》
思想是先把数组初始化为零然后从第一行开始赋值,然后往下走,再往右走,再往上走,在转的过程中如果遇到零就把它赋值,如果不等于零就终止。
代码如下:
注意是判断i+1,j+1是否小于n,不要判断i和j,这个代码写的有点乱,一定要弄懂这里的++j,++i之类的到底是什么意思,在思路清晰的时候做,不要在脑子一团浆糊的时候做。
#include<stdio.h>
02.
#include<string.h>
03.
int
main()
04.
{
05.
int
n;
06.
while
(~
scanf
(
"%d"
,&n))
07.
{
08.
int
a[n][n];
09.
int
i=0,j=n-1,k,l;
10.
memset
(a,0,
sizeof
(a));
11.
int
e=1;
12.
a[0][n-1]=1;
13.
while
(e<n*n)
14.
{
15.
while
(a[i+1][j]==0&&i+1<n) a[++i][j]=++e;
16.
while
(a[i][j-1]==0&&j-1>=0) a[i][--j]=++e;
17.
while
(a[i-1][j]==0&&i-1>=0) a[--i][j]=++e;
18.
while
(a[i][j+1]==0&&j+1<n) a[i][++j]=++e;
19.
}
20.
for
(i=0;i<n;i++)
21.
{
22.
for
(j=0;j<n;j++)
23.
printf
(
"%d "
,a[i][j]);
24.
printf
(
"\n"
);
25.
}
26.
}
27.
return
0;
28.
}