zoukankan      html  css  js  c++  java
  • 关于螺旋矩阵的问题

    题目如下:

    (拔高选做题,如果你把之前所有的知识都掌握了,可以思考一下这道题,本题不要求必须完成)
     输出 n=5 的螺旋方阵
           1  2  3  4  5
        16 17 18 19 6
        15 24 25 20 7
        14 23 22 21 8
        13 12 11 10 9 


    我看到网上有C语言的解法,然后就用Java重新写了一下:

    import java.util.Scanner;  
      
      
    public class TestLuoxuan {  
        public static void fun(int[][] a,int n){  
            int i,j,k = 0,m;  
            if( n % 2 == 0 ){  
                m = n / 2;  
            }else {  
                m = n/2 +1 ;  
            }  
            for(i = 0; i< m; i++){             
                for(j = i; j < n-i; j++){    // 产生 上部横行的数字,   01、02、03、04、05  
                    k++;                     
                    a[i][j] = k;              
                }  
                for(j = i+1; j < n-i; j++){  // 产生右部竖列的数字 ,6、7、8、9、10  
                    k++;  
                    a[j][n-i-1] = k;  
                }  
                for(j = n-i-2;j>=i;j--){  // 产生下部横行的数字, 11、12、13、14、15  
                    k++;  
                    a[n-i-1][j] = k;  
                }  
                for(j=n-i-2; j>=i+1; j--){    //产生左部 竖列 的数字, 16、17、18、19、20  
                    k++;  
                    a[j][i] = k;  
                }  
            }  
        }  
          
        public static void main(String[] args){  
            int n, i, j;  
            int[][] a = new int[100][100];  
            System.out.println("\r请输入 n阶的大小,注意:n<10 ");  
            Scanner scan = new Scanner(System.in);  
            n = scan.nextInt();  
            fun(a, n);  
              
            System.out.println(n+"阶的螺旋方阵如下:");  
            for(i = 0; i < n; i++){  
                for(j = 0; j< n; j++){  
                    if(a[i][j]<10){  
                        System.out.print("0"+a[i][j]+" ");  // 在个位数的前面加个0,以便于排列美观  
                    }else{  
                        System.out.print(a[i][j]+" ");                    
                    }  
                }  
                System.out.println();  
            }  
            System.out.println();  
        }  
    }</span> 

    输出结果是:

    请输入 n阶的大小,注意:n<10   
    5  
    5阶的螺旋方阵如下:  
    01 02 03 04 05   
    16 17 18 19 06   
    15 24 25 20 07   
    14 23 22 21 08   
    13 12 11 10 09

    这道题主要考察的是二位数组的运用~ 

    for(j = i; j < n-i; j++){    // 产生 上部横行的数字,   01、02、03、04、05  
        k++;                     
        a[i][j] = k;              
    }

    如果单单打印上面这段for循环,输出结果为:

    01、02、03、04、05

            06、07、08

                    09


    这就是整个图形中的一块,再根据这个思路,把其它四边都写出来就OK了~

  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/jackchiang/p/4516176.html
Copyright © 2011-2022 走看看