根据输入的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中的数组才不越界,所以如果调换
两个判断条件的顺序,数组就会越界,程序就会崩掉。
如果有所帮助,脸皮厚求个赞~
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
技术之路不在一时,山高水长,纵使缓慢,驰而不息。
公众号:秦怀杂货店