重点理解while循环的内容,理解蛇形填数的排布
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int a[N][N];
int m,n; //矩阵行、列
int x,y; //数字 1 的坐标
int number; // 记录数字的个数
int main(){
cin>>m>>n;
memset(a,0,sizeof(a));
//初始化 1 的坐标 (0,n-1)
x=0; y=n-1;
a[x][y]=1;
number=1;
while(number<m*n){ //顺时针填写数字
while(x+1 < m && !a[x+1][y]) a[++x][y] = ++number; //从上到下:x轴++,y轴不变 :x++,number++,a[x][y]=number;
while(y-1 >= 0 && !a[x][y-1]) a[x][--y] = ++number; //从右到左:x轴不变,y轴--
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++number; //从下到上 :x轴--,y轴不变
while(y+1<n && !a[x][y+1]) a[x][++y] = ++number; //从左到右 :x轴不变,y轴++
}
//打印出来
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
printf("%5d",a[i][j]);
cout<<endl;
}
cout<<endl;
return 0;
}
0 回复
0 转发
0 喜欢
1 阅读



