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 个回复

倒序浏览
我想的是做循环,二阶矩阵,当x=0(横排),y++(竖排),当x=0且y=4时,x++,然后依次前进,,这方法有点蠢,勿喷
回复 使用道具 举报
本帖最后由 ccl|r 于 2015-4-6 22:24 编辑

        public static void printLuoxuan(int n) {
                int times = (n + 1) / 2;
                int[][] arr = new int[n][n];
                int count = 1;
                for (int i = 0; i < times; i++) {
                        int x = i;
                        int y = i;
                        if (x == n / 2 && y == n / 2 && n % 2 == 1) {
                                arr[x][y] = count;
                                break;
                        }
                        while (y < n - 1 - i)
                                arr[x][y++] = count++;
                        while (x < n - 1 - i)
                                arr[x++][y] = count++;
                        while (y > i)
                                arr[x][y--] = count++;
                        while (x > i)
                                arr[x--][y] = count++;                        
                }
                for (int i = 0; i < n; i++) {
                        for (int j = 0; j < n; j++) {
                                System.out.print(arr[j] + "\t");
                        }
                        System.out.println();
                }
        }
回复 使用道具 举报
你输入一个N,则数组有(N+1)/2圈,最大值 N*N
然后一个for循环给每一圈赋值,就像麻将,每圈赋值四次,就能构成一圈了
回复 使用道具 举报 1 0
ccl|r 发表于 2015-4-6 22:09
public static void printLuoxuan(int n) {
                int times = (n + 1) / 2;
           ...

System.out.print(arr[j] + "\t");

应该是 输出arr【i】【j】
回复 使用道具 举报
感谢楼上的引导,对着答案有思绪了----以上为例:每一圈画一个四方形状------分开就是画四条边, 每边随着下一圈到来,边的长度为去掉首尾,即长度要减2.....
另附上另一位兄弟的做法,可以参考下.
<奋斗了一天的矩阵终于搞出来了~现在有点想吐>
http://bbs.itheima.com/thread-185193-1-1.html
(出处: 黑马程序员IT技术论坛)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马