关于螺旋矩阵的问题

摘要:
题目如下:(拔高选做题,如果你把之前所有的知识都掌握了,可以思考一下这道题,本题不要求必须完成)输出n=5的螺旋方阵12345161718196152425207142322218131211109我看到网上有C语言的解法,然后就用Java重新写了一下:importjava.util.Scanner;publicclassTestLuoxuan{publicstaticvoidfun(int[][

题目如下:

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

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

importjava.util.Scanner;  
  
  
public classTestLuoxuan {  
    public static void fun(int[][] a,intn){  
        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 voidmain(String[] args){  
        intn, i, j;  
        int[][] a = new int[100][100];  
        System.out.println("\r请输入 n阶的大小,注意:n<10 ");  
        Scanner scan = newScanner(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   
55阶的螺旋方阵如下:  
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了~

免责声明:文章转载自《关于螺旋矩阵的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇XShell删除键之类的不正常c#中decimal ,double,float下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

vue之文本渲染

以前,我们一直使用{{}}的形式来呈现文本,但除了此方法之外,vue还提供了其他几种常见的文本呈现方法:v-text:更新元素的innerTextv html:更新元素一次的innerHTMLv:静态插值v-pre:以原始格式输出v-cooke:保留元素上的指令,直到相关实例完成编译˂!幸运的是,Vue还提供了v-text和v-html来呈现文本或元素。...

Nginx设置KeepAlive为close

以腾讯首页为例,就有很多是请求是在客户端发生请求后,服务器响应完就立即关闭了。nginx不像apache,直接有指令keep-aliveoff/on;它使用的是keepalive_timeout[time],默认的时长为75,可以在http、server、location使用此指令。...

PartⅠ邮件伪造

什么是伪造发件人邮件地址简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 即简单邮件传输协议,是在Internet传输email的事实标准。正如名字所暗示的那样,它其实是一个非常简单的传输协议,无需身份认证,而且发件人的邮箱地址是可以由发信方任意声明的,利用这个特性可以伪造任意发件人。如何识别虚假(欺骗性)电子邮件...

Windows Server 2008 R2 备份与恢复详细实例

Windows ftp服务可以在百度内置,非常简单。)1.首先安装windows server 2008R2的备份功能。查找Windows的“服务器管理器”。下图显示了我的服务器的情况。双击它。备份完成后,我们卸载qq并删除磁盘F的数据。Linux服务器在没有密码的情况下构建Samba登录,并使用yum进行安装。...

数据库软考易混淆知识之信息化基础、项目管理

2、 关键路径关键路径是活动图中最长的路径示例:图中显示了软件项目的活动图,其中固定点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动持续时间的天数,则完成项目的最短时间为()天,活动EH和IJ的放松时间分别为()日。...

JRebel激活服务搭建

前言因为平时的开发工具是使用IntelliJIDEA,所以热部署项目代码的时候,使用的Jrebel。因为Jrebel是收费的,所以以前用的时候都是在网上找破解方法,在网上找到的办法是输入一个在线激活服务,来进行激活。由于简单方便就一直这样用的,今天早上打开IDEA后发现,Jrebel激活失效了。JRebel很好用,也是离不开大家的支持,所以如果条件允许的话,...