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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© szw727 中级黑马   /  2015-5-9 18:19  /  1089 人查看  /  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 个回复

倒序浏览
.......很腻害的样子
回复 使用道具 举报
xgd6612 发表于 2015-5-9 18:28
.......很腻害的样子

我看到网上写的太复杂,就自己写了一个
回复 使用道具 举报
不明觉厉
回复 使用道具 举报
szw727 发表于 2015-5-9 18:31
我看到网上写的太复杂,就自己写了一个

以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻
回复 使用道具 举报
思路都差不多。我发表过一个帖子,可以打印不是正方形的螺旋矩阵
回复 使用道具 举报
xgd6612 发表于 2015-5-9 18:44
以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻
...

如果迭代太困难,使用递归是一个好选择,我开始使用迭代,发现需要判断的情况太多,
结果发现一圈是一个规律,于是采用一次递归处理一圈,只需要调整传入数组的起始和结束点即可
回复 使用道具 举报
受教了!!!
回复 使用道具 举报
这个叫螺旋数组
回复 使用道具 举报
不是螺旋矩阵吗?第四天的作业么。。。。。。
回复 使用道具 举报
向大家保证不是面试题~~~大家学习一下倒是不错~~~
回复 使用道具 举报
研究了很久,不会
回复 使用道具 举报
学习了,
回复 使用道具 举报
这么吊。。
回复 使用道具 举报
学习加膜拜~呀~~至少我还不会~
回复 使用道具 举报
Cat 中级黑马 2015-5-9 21:48:57
16#
学习一下~
回复 使用道具 举报
这么复杂???
回复 使用道具 举报
前几天老师给的练习题 楼主能给语句注释一下就更容易看了
回复 使用道具 举报
厉害,学习了
回复 使用道具 举报
涨姿势啦,赞
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马