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
       

10 个回复

倒序浏览
                int SIZE = 5;
                int arr[][] = new int[SIZE][SIZE];
                int i, j, k = 0, n, m;
                n = SIZE;
                m = (n + 1) / 2;
                for (i = 0; i < n; i++) {
                        // 顶边,从左到右,行不变列变
                        for (j = i; j <= n - i - 1; j++)
                                arr[i][j] = ++k;// 输出1、2、3、4、13、14
                       
                        // 右边,从上到下,行变列不变
                        for (j = i + 1; j <= n - i - 1; j++)
                                arr[j][n - i - 1] = ++k; // 输出5、6、7、15
                       
                        // 底边,从右到左,行不变列变
                        for (j = n - i - 2; j >= i; j--)
                                arr[n - i - 1][j] = ++k; // 输出8、9、10、16
                       
                        // 左边,从下到上,行变列不变
                        for (j = n - i - 2; j >= i + 1; j--)
                                arr[j][i] = ++k; // 输出11、12
                }
                for (i = 0; i < n; i++) {
                        for (j = 0; j < n; j++)
                                System.out.print(arr[i][j] + "\t");
                        System.out.println("");
                }

评分

参与人数 1黑马币 +1 收起 理由
a546036242 + 1 很给力!

查看全部评分

回复 使用道具 举报
每打印到方阵边角时,行列角标互换在开始。
→ → → → →
↑  →  → →   ↓
↑  ↑    ☆    ↓  ↓
↑   ←  ←   ↓  ↓
← ←  ← ←  ↓
详细参考链接,内有设计思路。
http://wenku.baidu.com/link?url=WBKmmiqr06YsG8wcQRXTEhaUeR_RCgQ9gkquYghhVTsu4I1bW1j42CJgwyehruxbbmIiJoIqMTQLAYdBlpMWcJ7rY9fWjOWyGzzf2cLNbea
回复 使用道具 举报
对了,还有个用递归来实现的(本人小白还没看太明白)。
http://blog.chinaunix.net/uid-8615291-id-2456804.html
回复 使用道具 举报
有没有思路,
回复 使用道具 举报
这个还真不知道啊,不用搞这么难得,入学测试哪有那么难呢
回复 使用道具 举报
360638403 来自手机 中级黑马 2015-7-19 23:56:54
7#
去学测试没有那么难的
回复 使用道具 举报
小丑 高级黑马 2015-7-20 09:51:12
8#
Miss.H 发表于 2015-7-19 23:52
这个还真不知道啊,不用搞这么难得,入学测试哪有那么难呢

我入学测试还真的就有这个题目
回复 使用道具 举报
小丑 发表于 2015-7-20 09:51
我入学测试还真的就有这个题目

那你是怎么写的呢?分享一下呗
回复 使用道具 举报
帅帅loyal 发表于 2015-7-20 10:42
那你是怎么写的呢?分享一下呗
  1. public class Test9 {
  2.         public static void main(String[] args) {
  3.                 // 根据n创建一个二维数组
  4.                 int n = 4;
  5.                 int[][] arr = new int[n][n];
  6.                 // 调用数组赋值的方法
  7.                 method(arr);
  8.                
  9.                 // 将数组遍历出来
  10.                 for (int i = 0; i < arr.length; i++) {
  11.                         for (int j = 0; j < arr.length; j++) {
  12.                                 System.out.print(arr[i][j] + "\t");
  13.                         }
  14.                         System.out.println("\n");
  15.                 }

  16.         }

  17.         // 二维数组赋值方法
  18.         public static void method(int[][] arr) {
  19.                 // 创建数组的两个索引变量
  20.                 int i = 0;
  21.                 int j = 0;
  22.                 // 通过 max 和min控制索引i,j的变化
  23.                 int max = arr.length - 1;
  24.                 int min = 0;
  25.                 // 所需要赋的值
  26.                 int num = 1;

  27.                 while (min <= max) {
  28.                         // 1、i不变j++ 向右
  29.                         while (j < max) {
  30.                                 arr[i][j++] = num++;
  31.                         }
  32.                         // 2、j不变i++ 向下
  33.                         while (i < max) {
  34.                                 arr[i++][j] = num++;
  35.                         }
  36.                         // 3、i不变j-- 向左
  37.                         while (j > min) {
  38.                                 arr[i][j--] = num++;
  39.                         }
  40.                         // 4、j不变i-- 向上
  41.                         while (i > min) {
  42.                                 arr[i--][j] = num++;
  43.                         }
  44.                         // 由于可能在n为奇数的时候无法为中心那个数赋值所以要补上这个数的赋值
  45.                         if (min == max) {
  46.                                 arr[i][j] = num;
  47.                         }
  48.                         max--;
  49.                         min++;
  50.                         // 循环一圈又开始想有赋值j++
  51.                         j++;
  52.                         // 由于向上的时候最后一次赋值i多减了一次所以每次外循环都要将i补回来
  53.                         i++;
  54.                 }
  55.         }
  56. }
复制代码
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马