黑马程序员技术交流社区

标题: 求教一个关于循环的问题 [打印本页]

作者: 找个工作那么难    时间: 2014-11-25 21:29
标题: 求教一个关于循环的问题
输出 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
帮我讲一下思路
       
作者: 迷失的小Z    时间: 2014-11-25 21:34
二维数组,总之很麻烦……
作者: 娱尘    时间: 2014-11-25 22:04
二维数组,一个大for里面嵌套四个小for,角标转换
作者: 范中俊    时间: 2014-11-25 22:19
黑马的入学测试题里有这样的习题
作者: 江南小道士    时间: 2014-11-25 22:24
范中俊 发表于 2014-11-25 22:19
黑马的入学测试题里有这样的习题

入学测试有这样的习题?
作者: DamonZh    时间: 2014-11-25 22:27
范中俊 发表于 2014-11-25 22:19
黑马的入学测试题里有这样的习题

这应该属于算法题啦,感觉放在入学测试里不太合适,哎
作者: 范中俊    时间: 2014-11-25 22:28
1、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:                                
1        2        3        4
12      13      14       5
11      16      15       6
10       9        8       7




可以在论坛上找到答案的
作者: 刘隽哲    时间: 2014-11-25 23:00
这个数组比较绕    多看几遍吧   希望能帮到你
  1.         int size = 4;
  2.                 int arr[][] = new int[size][size];
  3.                 int i, j, k = 0, n, m;
  4.                 n = size;
  5.                 m = (n + 1) / 2;
  6.                 for (i = 0; i < n; i++)
  7.                 {
  8.                         // 顶边,从左到右,行不变列变
  9.                         for (j = i; j <= n - i - 1; j++)
  10.                                 arr[i][j] = ++k;// 输出1、2、3、4、13、14
  11.                        
  12.                         // 右边,从上到下,行变列不变
  13.                         for (j = i + 1; j <= n - i - 1; j++)
  14.                                 arr[j][n - i - 1] = ++k; // 输出5、6、7、15
  15.                        
  16.                         // 底边,从右到左,行不变列变
  17.                         for (j = n - i - 2; j >= i; j--)
  18.                                 arr[n - i - 1][j] = ++k; // 输出8、9、10、16
  19.                        
  20.                         // 左边,从下到上,行变列不变
  21.                         for (j = n - i - 2; j >= i + 1; j--)
  22.                                 arr[j][i] = ++k; // 输出11、12
  23.                 }
  24.                 for (int x=0;x<arr.length ; x++)
  25.                 {
  26.                         for (int y=0;y<arr[x].length ;y++ )
  27.                         {
  28.                                 System.out.print(arr[x][y]+"\t");
  29.                         }
  30.                         System.out.println();
  31.                 }
复制代码






       



作者: 阿穆隆    时间: 2014-11-25 23:48
很复杂的样子。。。先保存。哪天试试看能不能写出来、
作者: 王小忠    时间: 2014-11-26 00:13
有点难~~先保存先来~~
作者: yninggis    时间: 2014-11-26 00:43
看着无从下手,来学习学习!
作者: 244611    时间: 2014-11-26 00:52
这个我做过,广联达的笔试题,,四个循环,从左到右,从上到下,从右到左,从下到上,每次把行数,列数减一。
作者: 张卫贤    时间: 2014-11-26 01:04
很复杂的一个循环,先留下来吧
作者: 米家小九    时间: 2014-11-26 06:21
我也是刚看到二维数组,还真就看到了这种格式,不过没看懂
作者: 夏至落叶    时间: 2014-11-26 08:58
用到2维数组

  1. import java.util.Scanner;
  2. class LuoXuan3
  3. {       
  4.         public static void main(String[] args)
  5.         {       
  6.                 Scanner sc= new Scanner(System.in);
  7.                 System.out.println("输入大于0的数字");
  8.                 int num = sc.nextInt();
  9.                 fun(num);
  10.         }
  11.         public static void fun(int num)
  12.         {
  13.                 int [] [] arr =new int [num][num];
  14.                 int a = 0;int b = -1;
  15.                 int count = 0;          
  16.                 int temp1 =num;   
  17.                 int temp = 0;
  18.                 for (int z = 0;z<(num+1)/2 ; z++)
  19.                 {       
  20.                         temp1--;
  21.                         while (b<temp1) arr[a][++b] = ++count;       
  22.                         while (a<temp1) arr[++a][b] = ++count;
  23.                         while (b>temp) arr[a][--b] = ++count;
  24.                         temp++;
  25.                         while (a>temp) arr[--a][b] = ++count;
  26.                 }
  27.                 for (int m = 0;m<num ; m++)
  28.                 {
  29.                         for (int n = 0;n<num ;n++ )
  30.                         {
  31.                                 System.out.print(arr[m][n]+"\t");
  32.                         }
  33.                         System.out.println();
  34.                 }
  35.         }
  36. }
复制代码

作者: 雨过山更翠    时间: 2014-11-26 09:23
有些麻烦,还是先看基础吧
作者: scoto263    时间: 2014-11-26 09:24
看到那两个字就真心觉得比较晕了。。。
作者: Archer    时间: 2014-11-26 09:45
我之前写过过c语言的,java的完了给你写一下
作者: 高昌德    时间: 2014-11-26 11:49
好难的样子,,,不会考到吧??
作者: Afridoce    时间: 2014-11-26 14:23
来学习学习!
作者: ls61532529    时间: 2014-11-27 13:16
用二维数组
作者: liuhao0324    时间: 2014-11-27 13:30
看着很难的样子,先存起来,看看学到了那里会不会解决。
作者: 骑着乌龟去旅行    时间: 2014-11-27 20:04
好复杂的样子
作者: SpiderManZZH    时间: 2014-11-27 22:47
值得学习。。。
作者: xingkong123    时间: 2014-11-27 22:54
先保存起来吧,以后再看。。
作者: chun    时间: 2014-11-27 23:07
谢谢几位的分享  收藏了




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