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了~

  • 相关阅读:
    Windows服务器重启注意事项
    windows10设置共享目录
    新手如何让一个python写的游戏运行起来
    添加索引后SQL消耗量在执行计划中的变化
    Oracle密码验证函数与Create Profile
    visio秘钥
    一条SQL在内存结构与后台进程工作机制
    修改postgresql 密码
    svn 在Windows下用TortoiseSVN checkout 时报认证错误
    zip unzip 压缩解压缩命令
  • 原文地址:https://www.cnblogs.com/jackchiang/p/4516176.html
Copyright © 2011-2022 走看看