A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
输出 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

思路:这是一个5行四列的一个矩阵所以可以用循环来输出
        这个矩阵是不规则输出的矩阵所以我想到了用数组来存放,然后打印数组的方法
        经过尝试发现6,7,8,9这些竖排没有规律放入对应的数组,
        需要一个新的数组更大来给数组这四个数组加顺序;
        所以想到了用二维数组的方式做如下排列:
        int arr[][] = new int[][];
        让一个二维数组包含下面这些数组       
                                        0        arr[]1  2  3  4  5
                                                         0  1  2  3  4//这是坐标
                                        1        arr[]16 17 18 19 6
                                                         
                        arr[n]        2        arr[]15 24 25 20 7
                                                          
                                        3        arr[]14 23 22 21 8
                                                          
                                        4        arr[]13 12 11 10 9
                                                         0  1  2  3  4
                                        这
                                        是
                                        坐
                                        标
       
        */
class TestJZ{
        public static void main(String[] args) {
                int l,w,number=0,n;
                n = 7;
                int arr[][] = new int[n][n];
                for(w=0; w<(n+1)/2; w++){//限定总体的循环次数是(n+1)/2
                //给第一个数组赋值
                //并在第二次循环时能给下一行进行赋值动作且坐标位不冲突
                        for(l=w;l<=n-w-1;l++){
                                arr[w][l] = ++number;
                        }
                //给最后一列赋值,并能在下次的循环中给它的前一列赋值
                //并使坐标位置不冲突
                        for(l=w+1; l<=n-w-1; l++){
                                arr[l][n-w-1] = ++number;
                        }
                //给最下面的列进行赋值动作,并使他能给下一次它的上面行进行赋值
                //并且坐标位置不冲突
                        for(l=n-w-1-1;l>=w;l--){        //减一是为了坐标位不越界,
                                                                        //减W是为了第二次循环时候坐标位缩进
                                arr[n-w-1][l] = ++number;
                        }
                //给最左面一列进行赋值动作,并使他在下一次能给他右面的列进行赋值
                //并且坐标位置不冲突
                        for(l=n-w-1-1;l>w;l--){        //第一个减一是为了坐标不越界,第二个减一是为了不和上一句
                                                                        //的坐标位冲突
                                arr[l][w] = ++number;
                        }
                }
                for(w=0; w<n; w++){
                        for(l=0; l<n; l++){
                                System.out.print(arr[w][l]+"\t");
                        }
                System.out.println();
                }
        }
}
虽然有点想吐,不过搞出来实在是太兴奋了!分享下吧!

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

7 个回复

倒序浏览
自己测试了下,输入n=7也能高出螺旋~
回复 使用道具 举报
挺不错的,注释也很好。
回复 使用道具 举报
继续努力,休息一会
回复 使用道具 举报
膜拜!!!!!!!
回复 使用道具 举报
挺好的,继续努力把。
回复 使用道具 举报
螺旋方阵是什么玩意啊,
回复 使用道具 举报
看不懂,太高深
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马