3 条题解

  • 1
    @ 2023-10-15 23:51:34
    #include<stdio.h>
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	int nn=n*n;
    	int x=1,y=n;
    	int fx=0;
    	int num[101][101]={0};
    	for(int i=1;i<=nn;i++){
    		num[x][y]=i;
    		if(fx==0){               //下
    			if(x+1>n||num[x+1][y]!=0){ //提前预判下一位越界或者碰头  
    				fx=1;//改变方向
    				y--;
    			}
    			else{
    				x++;
    			}
    		}
    		else if(fx==1){          //左
    			if(y-1<1||num[x][y-1]!=0){
    				fx=2;//改变方向
    				x--;
    			}
    			else{
    				y--;
    			}
    		}
    		else if(fx==2){          //上
    			if(x-1<1||num[x-1][y]!=0){
    				fx=3;//改变方向
    				y++;
    			}
    			else{
    				x--;
    			}
    		}
    		else if(fx==3){          //右
    			if(num[x][y+1]!=0){
    				fx=0;//改变方向
    				x++;
    			}
    			else{
    				y++;
    			}
    		}
    	}
    	for(int i=1;i<=n;i++){
      		for(int j=1;j<=n;j++){
    			printf("%d ",num[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
    }
    
    • @ 2023-11-14 20:45:25

      再补充一点奥,if里判断碰头和越界后,y和x还要变一次的原因是还需要同时判断下一次的坐标值,所以说要提前判断

    • @ 2025-1-22 19:04:10

      这个思路最简便👍 👍 👍 👍

信息

ID
131
时间
3000ms
内存
128MiB
难度
6
标签
(无)
递交数
542
已通过
179
上传者