蛇形填数

#include<stdio.h>
#include<string.h>
#define maxn 20  
//它代表20,如果在程序里面写
//
//if(i<maxn){.........}
//
//编译器在处理这个代码之前会对maxn进行处理替换为20。 
int a[maxn][maxn];//生成一个整形的二维数组,这个数组共有maxn*maxn个元素。分别为a[0][0],a[0][1]...a[maxn][maxn] 
int main()
{
	int x,y,n,tot=0;//tot即为我们的1,2,3...要显示的数字 
	scanf("%d", &n);
	memset(a,0,sizeof(a));//作用是把数组a清零,它在string.h中定义。 把所有格子都赋值为0,可以方便判断是否以前走过;这和下面的 !a[x+1][y]相关联 
	a[x=0][y=n-1] = tot = 1;//赋值x=0,y=n-1 后马上要把他们 作为数组a的下标,因此合并完成,而tot和a[0][n-1]都要赋值一,也可以合并完成 
	while(tot<n*n)
	{
		while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot;//因为a[0][3]已经在上面赋值为1,所以应该从a[1][3]开始,即x+1, 
		while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot;//!a[x+1][y]是单目运算符因为他只有一个操作数a,!为逻辑非,判断是否a[x+1][y]==0,就是看看是不是以前走过,简写成!a[x+1][y],他的意思是若a=0则为真。&&是短路运算符。同真则真,一假则假。 
		while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot;
		while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot;
	}
	for(x=0;x<n;x++)
	{
		for(y=0;y<n;y++)
			printf("%3d", a[x][y]);//%3d是指表示以3位的固定宽度输出整型数 ,不足3位,在前面补空格; 超过3位,按实际位数输出 ,在这里的作用是主要让有数字之间空格,看着齐整,不信可以删了它试试 
			printf("\n");	//作用是每一行输出后要换行 
	}
	return 0;
	
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值