蛇形矩阵 详解(c语言版)

//设置矩阵边界为40*40
//直接定义第一个数1,作为起点
/* (x-1>=0)和(y-1>=0) 不成立,即分别判断此时坐标在第一行或第一列。即到达边界。
要开始另一个方向的填充*/
//(y+1<40)和(x+1<40) 表明矩阵边界
//(!a[x-1][y+1])和(!a[x+1][y-1]) 表明不为零
#include<stdio.h>
int a[45][45];
int main() {
	int x = 0, y = 0, tot,count=0;
	tot = a[x][y] = 1;
	while (tot < 40 * 40) {
		while (x - 1 >= 0 && y + 1 < 40 && !a[x - 1][y + 1])//从左下到右上填充
			a[--x][++y] = ++tot;
		a[x][++y] = ++tot;// 到达边界,坐标向右移动一位
		while (x + 1 < 40 && y - 1 >= 0 && !a[x + 1][y - 1])//从右上到左下填充
			a[++x][--y] = ++tot;
		a[++x][y] = ++tot;//到达边界,坐标向下移动一位
	}
	for (int i = 0; i <5; i++) {
		for (int j = 0; j < 5; j++) {
			printf("%d ", a[i][j]);
			count++;
			if(count%5==0)
				printf("\n");
		}
	}
	printf("%d", a[19][19]); //数组行列都是从0开始的 ,第20行20列在数组中是a[20-1][20-1];
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值