《算法竞赛入门经典(第2版)》第三章重要例题,蛇形填数
程序员文章站
2024-03-18 23:30:28
...
蛇形填数
#include <stdio.h>
#include <string.h>
#define maxn 10
int a[maxn][maxn];
int main()
{ int n=0;int t=1;int G=1;
memset(a,0,sizeof(a));//初始化二维数组
scanf("%d",&n);//输入n
int l=n;//我定义n为可变的,l为不可变的
while(t<=l*l)//t是计数器,每走一格会加1,比如输入n=3,如果t=10就跳出循环了,这也说明3的蛇形队列不存在10
{
for(int i=G;i<=n;i++)//向下走
{
a[i][n]=t;//printf("a(%d,%d)=%d\n",i,n,t);//给向下走过程中碰到的格子赋值
t++;//表示下个格子的数字会加1
}
for(int i=n-1;i>=G;i--)//向左走
{
a[n][i]=t;//printf("a(%d,%d)=%d\n",l,i,t);//同理赋值
t++;//同理
}
for(int i=n-1;i>=G;i--)//向上走
{
a[i][G]=t;//printf("a(%d,%d)=%d\n",i,G,t);//同理赋值
t++;//同理
}
n--;//边界移动一个单位
for(int i=G+1;i<=n;i++)//向右走
{
a[G][i]=t;//printf("4a(%d,%d)=%d\n",G,i,t);
t++;
}
G++;//起点增加一个单位
}
for(int i=1;i<=l;i++)//输出结果
{
for(int j=1;j<=l;j++)
{printf("%3d",a[i][j]);}
printf("\n");
}
return 0;
}
上一篇: 算法竞赛入门经典第三章
下一篇: 分数化小数(decimal)