返回题解分享
讨论 / 题解分享/ 帖子详情

蛇形填数2 - 题解

重点理解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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!