根据输入的n的值,打印出大小为n*n的蛇形矩阵,效果如下:
代码如下:
#include#includeusing 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(x0&&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中的数组才不越界,所以如果调换
两个判断条件的顺序,数组就会越界,程序就会崩掉。