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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 烨LEO 中级黑马   /  2015-8-13 00:16  /  663 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
输出 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 XDemo
{
        public static void main(String[] args)
        {
                int SIZE = 5;
                int i,j,k=0,n;
                n = SIZE;
                int[][] arr = new int[SIZE][SIZE];
                for(i=0; i<n; i++)
                {
                        //顶层,从左到右,行不变列变
                        for(j=i;j<=n-i-1;j++)
                        {
                                arr[i][j] = ++k;//输出1,2,3,4,5,17,18,19,25
                        }
                        //右边,从上到下,行变列不变
                        for (j=i+1; j<=n-i-1; j++)
                        {
                                arr[j][n-i-1] = ++k; //输出6,7,8,9,20,21
                        }
                        //底边,从右到左,行不变列变
                        for (j=n-i-2; j>=i; j--)
                        {
                                arr[n-i-1][j] = ++k; //输出10,11,12,13,22,23
                        }
                        //左边,从下到上,行变列不变
                        for (j=n-i-2; j>=i+1; j--)
                        {
                                arr[j][i] = ++k;  //输出 14,15,16,24
                        }
                       
                }
                for (i=0; i<n; i++)
                {
                        for(j=0; j<n; j++)
                        {
                                System.out.print(arr[i][j] + "\t");
                        }
                        System.out.println();
                }
        }
}

评分

参与人数 1黑马币 +6 收起 理由
bingo54 + 6 淡定

查看全部评分

13 个回复

倒序浏览
这个题目起初让我好头痛
回复 使用道具 举报
好牛逼哦!{:2_30:}
回复 使用道具 举报
6666666666666666666666666666666666
回复 使用道具 举报
赞一个
回复 使用道具 举报
cat73 黑马帝 2015-8-13 13:36:11
地板
本帖最后由 cat73 于 2015-8-13 13:54 编辑
  1. 1         2         3         4         5         6         7         8         9         10        
  2. 36        37        38        39        40        41        42        43        44        11        
  3. 35        64        65        66        67        68        69        70        45        12        
  4. 34        63        84        85        86        87        88        71        46        13        
  5. 33        62        83        96        97        98        89        72        47        14        
  6. 32        61        82        95        100       99        90        73        48        15        
  7. 31        60        81        94        93        92        91        74        49        16        
  8. 30        59        80        79        78        77        76        75        50        17        
  9. 29        58        57        56        55        54        53        52        51        18        
  10. 28        27        26        25        24        23        22        21        20        19        
复制代码

JS的代码- - 感觉算法题用JS更合适一些- -
  1. !function() {
  2.     // 螺旋数列
  3.     function xxx(size) {
  4.         // 初始化存储区域
  5.         var array = [];
  6.         for (var i = 0; i < size; i++) {
  7.             array[i] = [];
  8.         }

  9.         // 生成数字
  10.         var s = size;       // 当前的输出大小
  11.         var n = 1;          // 还有几次循环要减少输出大小
  12.         var direction = 1;  // 输出方向 1→ 2↓ 3← 4↑
  13.         var x = 0;          // 当前的x坐标
  14.         var y = -1;         // 当前的y坐标
  15.         var num = 1;        // 当前的数字
  16.         while (s > 0) {
  17.             // 生成一行或者一列数字
  18.             for (var i = 0; i < s; i++) {
  19.                 // 首先根据方向计算出输出的目标坐标
  20.                 if (direction == 1) {
  21.                     y++;
  22.                 } else if (direction == 2) {
  23.                     x++;
  24.                 } else if (direction == 3) {
  25.                     y--;
  26.                 } else {
  27.                     x--;
  28.                 }

  29.                 // 然后将目标数字输出到指定坐标
  30.                 array[x][y] = num++;
  31.             }

  32.             // 控制输出大小的缩小
  33.             n--;
  34.             if (!n) {
  35.                 n = 2;
  36.                 s--;
  37.             }
  38.             // 控制方向的更变
  39.             direction++;
  40.             if (direction == 5) {
  41.                 direction = 1;
  42.             }
  43.         }
  44.         
  45.         // 打印输出
  46.         var out = "";
  47.         for (var i = 0; i < size; i++) {
  48.             for(var j = 0; j < size; j++) {
  49.                 out += array[i][j] + "\t";
  50.             }
  51.             out += "\n";
  52.         }
  53.         console.log(out);
  54.     }

  55.     xxx(10);
  56. }();
复制代码

略微改下代码还可以实现逆时针输出
  1. 1        36        35        34        33        32        31        30        29        28        
  2. 2        37        64        63        62        61        60        59        58        27        
  3. 3        38        65        84        83        82        81        80        57        26        
  4. 4        39        66        85        96        95        94        79        56        25        
  5. 5        40        67        86        97        100       93        78        55        24        
  6. 6        41        68        87        98        99        92        77        54        23        
  7. 7        42        69        88        89        90        91        76        53        22        
  8. 8        43        70        71        72        73        74        75        52        21        
  9. 9        44        45        46        47        48        49        50        51        20        
  10. 10       11        12        13        14        15        16        17        18        19        
复制代码

由内向外
  1. 100       65        66        67        68        69        70        71        72        73        
  2. 99        64        37        38        39        40        41        42        43        74        
  3. 98        63        36        17        18        19        20        21        44        75        
  4. 97        62        35        16        5         6         7         22        45        76        
  5. 96        61        34        15        4         1         8         23        46        77        
  6. 95        60        33        14        3         2         9         24        47        78        
  7. 94        59        32        13        12        11        10        25        48        79        
  8. 93        58        31        30        29        28        27        26        49        80        
  9. 92        57        56        55        54        53        52        51        50        81        
  10. 91        90        89        88        87        86        85        84        83        82        
复制代码
回复 使用道具 举报
厉害,我前两天还在想这个题,没想到用二维数据这么简单就可以解了,哎厉害啊

点评

其实一维数组也是可以解的- - 甚至有些语言的二维数组就是用一维模拟的- -  发表于 2015-8-13 14:56
回复 使用道具 举报
kenfans 发表于 2015-8-13 13:38
厉害,我前两天还在想这个题,没想到用二维数据这么简单就可以解了,哎厉害啊 ...

哎,我之前看别人写的螺旋矩阵,那算法复杂到不想看,还计算每一圈元素的个数。你这个解法还真没有想到
回复 使用道具 举报
           学会了 .. .
回复 使用道具 举报
没必要定义size,直接int n = 5搞定!
回复 使用道具 举报
陈cc 中级黑马 2015-8-13 23:02:42
11#
cat73 发表于 2015-8-13 13:36
JS的代码- - 感觉算法题用JS更合适一些- -

略微改下代码还可以实现逆时针输出

6666666666666666666今天刚刚接触这个题。。头都爆炸了
回复 使用道具 举报
Jquery的有木有?
回复 使用道具 举报
cat73 发表于 2015-8-13 13:36
JS的代码- - 感觉算法题用JS更合适一些- -

略微改下代码还可以实现逆时针输出

66666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马