1 条题解

  • 0
    @ 2023-6-11 12:16:47

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    int n,a[10][10];
    
    //k表示赋值第k个斜边,t表示要赋值的起始值
    //x y表示要赋值的起始位置 
    void fun(int k,int t,int x,int y){
    	 //递归出口 
    	 if(x <= n && y <= n){
    	 	//第奇数斜边,向右上 
    	 	 if(k % 2 == 1){
    	 	 	 //如果在矩阵中 
    	 	     while(x >= 1 && y <= n){
    	 	    	a[x][y] = t;
    	 	    	x--;
    	 	    	y++;
    	 	    	t++;
    			 }
    			 x++;y--; 
    		 }else{
    		 	//向左下
    			while(x <= n && y >= 1){
    				a[x][y] = t;
    				x++;
    				y--;
    				t++;
    			}  
    			x--;y++;
    		 }
    		 
    		 //k<n奇数向右,偶数向下
    		 if(k<n){
    			 if(k % 2 == 1){
    			 	  fun(k+1,t,x,y+1);		
    			}else{
    				  fun(k+1,t,x+1,y);
    			}
    		}else{
    			 //否则偶数向右,奇数向下
    			 if(k % 2 == 0){
    			 	  fun(k+1,t,x,y+1);		
    			 }else{
    				  fun(k+1,t,x+1,y);
    			 }	
    		} 
    	 }
    }
    
    int main(){
    	int i,j;
    	cin>>n;
    	fun(1,1,1,1);
    	for(i = 1;i <= n;i++){
    		for(j = 1;j <= n;j++){
    			cout<<setw(5)<<a[i][j];
    		}
    		cout<<endl;
    	}
        return 0;
    }
    
    
    • 1

    信息

    ID
    2302
    时间
    1000ms
    内存
    64MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者