C:蛇形矩阵,内蒙古,892,1809,程序设计

本文介绍了如何使用C语言生成蛇形矩阵。当输入正整数n时,程序会输出1到n的蛇形排列。思路是根据右拐和下拐的动作,在遇到边界时改变方向。详细解题思路和代码实现已给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:输入正整数n(n<30),输出1到n的蛇形矩阵;

例如:

n=10时

1        2        6        7

3        5        8

4        9

10

思路:分为右拐和下拐两个动作,每次进行到第0行时右拐,进行到第0列时下拐;每次拐弯移动的步数相比上次拐外都加 1;右拐后,每走一步需要向左下位置(下一行前一列)赋值;下拐后,每走一步需要向右上位置(上一行后一列)赋值。思路来源于青蓝向日葵前辈的下方链接;

C语言实现蛇形矩阵/蛇形数组并输出(C语言学习记录--陌生兔)_青蓝向日葵的博客-优快云博客引言编程题:输入正整数n(n<MAX),输出1到n蛇形矩阵。【例如】n=101 2 6 73 5 84 910思路昨天晚上无意看到这题,打算尝试一下。这种题无非就是找规律,和数学题差不多。当时没有工具,勉强在手机上的表格上写了蛇形数组,观察了下思路立马就出来了。简单描述下,蛇是蛇形走位,不走寻常路,主要走副对角线,碰到上顶或左顶就掉头。由于是对角线,然后我发...https://blog.youkuaiyun.com/qq_43919533/article/details/103320932

代码:

#include<stdio.h>
void snake_bloking()
{
	int a[20][20]={0},m=1,n=0,i=0,j=0,k=0;   	//设置一个可以装下蛇的数组,i控制行,j控制列;m存入数字,n输出长度,k记录拐弯后步数 
	printf("请输入蛇的长度(0<n<30,正整数):");
	while(scanf("%d",&n),n>=30||n<1);
	a[0][0]=m;//m从位置(0,0)开始,从值为1开始递增; 
	while(m<n)
	{
		if(i==0){//当每次到第0行时,向右拐j+1,同时赋值m+1;每次拐弯k++,且拐弯后走k步; 注这里的if可加可不加,加了帮助理解 
			a[i][++j]=++m;
			k++;
		}
		for(int x=k;m<n&&x>0;--x){//右拐后走k步,每走一步为下一行前一列位置元素赋值; 
			a[++i][--j]=++m;
		}
		if(m<n){//到了第0列,向下拐,并赋值m+1;拐弯记得k++,拐弯后走k步;此处不必判别j==0,严格执行上述过程,该步j必然等于0,故省略;
			a[++i][j]=++m;
			k++;
		}
		for(int x=k;m<n&&x>0;--x){//下拐后走k步,每走一步为上一行后一列位置元素赋值; 
			a[--i][++j]=++m;
		}
	}
	for(int p=0;p<k+1;++p){//输出大矩阵中已被赋值的小矩阵中不为0的元素 
		for(int q=0;q<k+1;++q)
			if(a[p][q]!=0)
				printf("%4d",a[p][q]);	
		printf("\n");
	}
}
int main()
{
	snake_bloking();
	return 0;
} 

运行结果:

如果你有好思路欢迎留言讨论,文章不足之处也欢迎大家批评指正。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值