蛇形填数

蛇形填数

这个代码参照刘汝佳著的《算法竞赛入门经典》

思想是先把数组初始化为零然后从第一行开始赋值,然后往下走,再往右走,再往上走,在转的过程中如果遇到零就把它赋值,如果不等于零就终止。

代码如下:


注意是判断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. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值