蛇形矩阵 回形矩阵(学生视角最容易理解的方法)C语言 傻瓜式解题

蛇形矩阵

相信大家对于蛇形矩阵都有种朦胧的感觉,仿佛答案就在眼前但是却没戴上眼镜,那么接下来就由我帮助大家找回并戴上眼镜

在这里插入图片描述
首先我们来看一下这道题目:
给定你一个数,按要求在n * n的方形矩阵里填入1,2,3,…,n*n,要求填成蛇形。例如n=4时,该方阵为
在这里插入图片描述
解题思路
我们去判断它的一个打印方向,因为它每次打印的方向都是有规律的,例如本题从右上角开始打印,首先是向下打印,当它在向下打印的过程中遇到该矩阵的边界时会改变方向,而它的方向是固定的,只有从上到下,从右到左,从下到上,从左到右,方向的改变就体现的是一个循环。而它打印的数字也是固定的,例如4 * 4的矩阵那么它打印的数字就只会到16,因此我们可以将打印的数字作为循环的结束标志。

输入

4

输出

在这里插入图片描述

代码

	int  a[100][100]={},fx,fy,n;    //默认二维数组中的每一位上初始数值为0  fx代表行,fy代表列 
	scanf("%d",&n);
	fx=0;fy=n-1;  //确定打印开始位置 
	int dir=0;//表示方向  0:从上往下 1:从右往左 2:从下往上 3:从从左到右 
	for(int i=1;i<=n*n;i++)  //打印的值 
	{
		a[fx][fy]=i;   
		//打印 第一个之后判断接下来打印的方向 
		switch(dir)
		{
			case 0:     //往下打  改变的是行数,而列数没变,因此fx++,fy不变 
				fx++;   //往下打印需要判断边界值,确定是否能继续在同方向继续打印 
				//判断方式 如果fx超出二维数组的边界也就是fx>=n,或者当下一位数组位置中存在不为0的数时停止打印改变方向 
				if(fx==n-1||a[fx+1][fy]!=0)
					dir=1;         //改变方向 
				break; 
					
			case 1:     //往左打,改变的是列数,行数不变,且列数减小,因此fy--,fx不变 
				fy--;   //同样需要判断边界值 
				//判断方式 如果fy超出二维数组的边界也就是fy==0,或者下一位中存在不为0的数时停止打印改变方向 
				if(fy==0||a[fx][fy-1]!=0)
					dir=2;        //改变方向   
				break;
					
			case 2:    //往上打,改变的是行数,列数未变 ,因此 fx--,fy不变
			 	fx--;  //老规矩判断边界值
				//判断方式 如果fx超过边界值也就是fx==0,或者下一位中存在不为0的数时停止打印并改变方向
				if(fx==0||a[fx-1][fy]!=0)
					dir=3;        //改变方向
					break;
			
			case 3:    //无注释  举三反一思考 
				fy++;   				 
				if(fy==n-1||a[fx][fy+1]!=0)
					dir=0;        //一圈输出结束,回到刚开始时的方向上 
					break;	 
		}
		
	 } 
	for(int i=0;i<=n-1;i++)
	{
		for(int j=0;j<=n-1;j++)
			printf("%d\t",a[i][j]);
		printf("\n");
	}

总结
这种方法比较傻瓜式,去判断它的边界然后改变它的行列坐标进行输出,但是比较容易理解,大家可以参考我的代码去自己思考一下更优解。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛樊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值