打印蛇形矩阵

根据输入的n的值,打印出大小为n*n的蛇形矩阵,效果如下:

代码如下:

 

 

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int n,**p,i,total=1,x=0,y,j;
	cin>>n;
	y=n-1;
	p=new int*[n];
	for(i=0;i<n;i++)
		p[i]=new int[n];
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			p[i][j]=0;//把矩阵的所有元素都赋值为0
		p[x][y]=1;//把第一行最后一个赋值为1
		while(total<n*n)
		{
			while(x<n-1&&p[x+1][y]==0)//向下不断赋值
			{

					total++;
					p[x+1][y]=total;
					x++;
			}
			while(y>0&&p[x][y-1]==0)//向左不断赋值
			{
					total++;
					p[x][y-1]=total;
					y--;
			}
			while(x>0&&p[x-1][y]==0)//向上不断赋值
			{
					total++;
					p[x-1][y]=total;
					x--;
			}
			while(y<n-1&&p[x][y+1]==0)//向右不断赋值
			{
					total++;
					p[x][y+1]=total;
					y++;
			}		
		}
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
				cout<<std::right<<setw(4)<<p[i][j]<<" ";//控制输出占位数
			cout<<endl;
		}
		return 0;
}


但是过程中出现了一个问题,就是里层while的判断条件不能调换,因为判断的时候,如果是并列条件,第一个不成立的时候,就会跳出判断,不会再判断第二个条件,

 

只有第一个条件成立的时候,才会去判断第二个,但是在在上面的代码中,x<n-1&&p[x+1][y]==0,只有在x<n-1成立的时候,p[x+1][y]==0中的数组才不越界,所以如果调换

两个判断条件的顺序,数组就会越界,程序就会崩掉。

 

如果有所帮助,脸皮厚求个赞~

此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

技术之路不在一时,山高水长,纵使缓慢,驰而不息。

公众号:秦怀杂货店

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值