黑马程序员技术交流社区

标题: ~~~~~输出 n=5 的螺旋方阵 [打印本页]

作者: HwH199209    时间: 2015-8-9 22:58
标题: ~~~~~输出 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

class LuoXuan2{
        public static void main(String[] args){
                int size = 5 ;
                int n = size;
                int [][] arr = new int[size][size];
                int k = 0;
                for (int i = 0;i<n-2 ;i++ ){
                        if(i == n-3){
                                arr[i][i]=25;
                                }
                        for(int j = i;j<n-i-1;j++){
                                arr[i][j]=++k;
                                }
                        for(int j=i ;j<n-i-1;j++){
                                arr[j][n-i-1]=++k;
                                }
                        for(int j=n-i-1;j>i;j--){
                                arr[n-i-1][j]=++k;       
                                }
                        for(int j=n-i-1;j>i;j--){
                                arr[j][i]=++k;       
                                }
                }
       
                for(int i=0;i<size;i++){
                        for(int j=0;j<size;j++){
                                System.out.print(arr[i][j]+"\t");
                        }
                        System.out.println();
                }
        }
}


作者: HwH199209    时间: 2015-8-9 22:59
由于最后一个数出不来,参考老师的改良。

class LuoXuan{
        public static void main(String[] args){
                int size = 5 ;
                int n = size;
                int [][] arr = new int[size][size];
                int k = 0;
                for (int i = 0;i<n-2 ;i++ ){
                        for(int j = i;j<=n-i-1;j++){
                                arr[i][j]=++k;
                                }
                        for(int j=i+1 ;j<=n-i-1;j++){
                                arr[j][n-i-1]=++k;
                                }
                        for(int j=n-i-2;j>=i;j--){
                                arr[n-i-1][j]=++k;       
                        }
                        for(int j=n-i-2;j>i;j--){
                                arr[j][i]=++k;       
                        }
                }
       
                for(int i=0;i<size;i++){
                        for(int j=0;j<size;j++){
                                System.out.print(arr[i][j]+"\t");
                        }
                        System.out.println();
                }
        }
}
作者: 青春随了风    时间: 2015-8-9 23:08
有点理解不了
作者: 逆光奔跑    时间: 2015-8-9 23:16
好厉害,我做了好久都没搞清楚逻辑。
作者: 逆光奔跑    时间: 2015-8-9 23:18
好厉害的大神啊!
作者: HwH199209    时间: 2015-8-9 23:18
青春随了风 发表于 2015-8-9 23:08
有点理解不了

(我的设计)定义一个二维数组用来存储数据,定义一个int变量,变量是自增的。再看for循环下的第一个循环,输出一行即1、2、3、4。之后再走列5、6、7、8,。。。。。依次类推~~~总结规律~~~把循环写好就好了

(下面改良)只是每次循环的次数不一样,第一行打印1、2、3、4、5。之后那一列6、7、8、9。在之后是10、11、12、13.。。。。。依次类推得到规律。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2