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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© szw727 中级黑马   /  2015-5-9 18:19  /  1073 人查看  /  21 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。如: n = 4 则打印:
1        2        3        4       
12        13        14        5       
11        16        15        6       
10        9        8        7

直接调用show3(4); 即可,功能都在show2中
  1. public static void show3(int n)
  2.         {
  3.                 int[][] array = new int[n][n];
  4.                 int number = 1;
  5.                 int time = n/2;
  6.                 show2(array, 0, n, number, time);
  7.                
  8.                 if(n%2 == 1)
  9.                 {
  10.                         array[n/2][n/2] = n*n;
  11.                 }
  12.                
  13.                 for(int i=0; i<n; ++i)
  14.                 {
  15.                         for(int j=0; j<n; ++j)
  16.                         {
  17.                                 System.out.print(array[i][j]+ "\t");
  18.                         }
  19.                         System.out.println();
  20.                 }
  21.         }
  22.         public static void show2(int[][] array, int start, int end, int number, int times)
  23.         {
  24.                
  25.                 for(int i=start; i<end-1; ++i)
  26.                 {
  27.                         array[start][i] = number++;
  28.                 }
  29.                 for(int i=start; i<end-1; ++i)
  30.                 {
  31.                         array[i][end-1] = number++;
  32.                 }
  33.                 for(int i=end-1; i>start; --i)
  34.                 {
  35.                         array[end-1][i] = number++;
  36.                 }
  37.                 for(int i=end-1; i>start; --i)
  38.                 {
  39.                         array[i][start] = number++;
  40.                 }
  41.                 if(times>1)
  42.                 {
  43.                         show2(array, start+1, end-1, number, times-1);
  44.                 }
  45.         }
复制代码

21 个回复

正序浏览
学习、学习。。
回复 使用道具 举报
看不懂,能不能加上注释
回复 使用道具 举报
涨姿势啦,赞
回复 使用道具 举报
厉害,学习了
回复 使用道具 举报
前几天老师给的练习题 楼主能给语句注释一下就更容易看了
回复 使用道具 举报
这么复杂???
回复 使用道具 举报
Cat 中级黑马 2015-5-9 21:48:57
16#
学习一下~
回复 使用道具 举报
学习加膜拜~呀~~至少我还不会~
回复 使用道具 举报
这么吊。。
回复 使用道具 举报
学习了,
回复 使用道具 举报
研究了很久,不会
回复 使用道具 举报
向大家保证不是面试题~~~大家学习一下倒是不错~~~
回复 使用道具 举报
不是螺旋矩阵吗?第四天的作业么。。。。。。
回复 使用道具 举报
这个叫螺旋数组
回复 使用道具 举报
受教了!!!
回复 使用道具 举报
xgd6612 发表于 2015-5-9 18:44
以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻
...

如果迭代太困难,使用递归是一个好选择,我开始使用迭代,发现需要判断的情况太多,
结果发现一圈是一个规律,于是采用一次递归处理一圈,只需要调整传入数组的起始和结束点即可
回复 使用道具 举报
思路都差不多。我发表过一个帖子,可以打印不是正方形的螺旋矩阵
回复 使用道具 举报
szw727 发表于 2015-5-9 18:31
我看到网上写的太复杂,就自己写了一个

以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻
回复 使用道具 举报
不明觉厉
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马