7 条题解

  • 0
    @ 2024-4-11 20:39:23

    重点理解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;
    }
    

    信息

    ID
    78
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    682
    已通过
    175
    上传者