全部评论 1

  • 现在老师应该已经讲了,我来发一下我的题解:

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
    	int a[102][102]={},n,up=-1,le=-1,dw,ri,fang=0,qa=0,qb=0;
    	cin>>n;
    	dw=n,ri=n;//up,le,dw,ri是四个边界
    	for(int i = 1;i<=(n*n);i++){//生成
    		if(qb==le){//碰到左边界
    			qa--;
    			qb++;
    			fang++;
    			dw--;
    		}
    		if(qb==ri){//碰到右边界
    			qa++;
    			qb--;
    			fang++;
    			up++;
    		}
    		if(qa==up){//碰到上边界
    			qb++;
    			qa++;
    			fang++;
    			le++;
    		}
    		if(qa==dw){//碰到下边界
    			qb--;
    			qa--;
    			fang++;
    			ri--;
    		}
    		a[qa][qb]=i;
    		if(fang%4==0)qb++;
    		if(fang%4==1)qa++;
    		if(fang%4==2)qb--;
    		if(fang%4==3)qa--;//四行确定方向并移动
    	}
    	for(int i = 0;i<n;i++){//输出
    		for(int j = 0;j<n;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<endl;
            	}
    	return 0;		
    }
    

    这个题解用了一个标记fangfang来作为方向的标记。

    2024-08-02 来自 广东

    0

热门讨论