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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雪人 中级黑马   /  2013-10-9 00:13  /  1735 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 雪人 于 2013-10-10 07:54 编辑

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


求思路...不求源码...如果你感觉不方便在这里说,能私信我,或者发邮箱 308380504@qq.com也可以...小弟在此感激不尽....

注意: 求思路,我不要代码...

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

8 个回复

倒序浏览

找到拐点(将其设置为变量)是关键,然后设置输出方式



评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-9 08:45:58
藤椅
如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
回复 使用道具 举报
怎么又是一个螺旋数组. .好吧.我在一个贴上贴过代码.
我的思路是这样的.
首先创建一个二维数组.
设定四个值,分别是矩阵的上面的横向长度(矩阵边长),下面的横向长度(设为1),左边的纵向长度(设为1),和右边的纵向长度(矩阵边长).
然后再设定i和j.     第一个for循环.  是以上面的横向长度为限制,把数字添加进一个数组.(已经添加进了一排,那么上面的横向长度肯定是需要减一)   i++;
     第二个for循环,是以右边的纵向长度为限制,把数字添加进去一个数组.同上,也是需要减一. j++;
    第三个for循环,以下面的横向长度(开始为1)为循环限制,  利用i--来添加进数字. (当然,下面的横向长度是要+1的)i--;
   第四个for循环同理.  j--;
     这就是外围的一圈.
    然后再套上一个while循环.条件是(上面的横向长度<=下面的横向长度&&左边的纵向长度>=右边的纵向长度)

退出循环后,  最中间的那个点,需要添加进去..
  所以  我现在去找一下我的那个代码.....

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
  1. import java.io.*;

  2. class  roll
  3. {         
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 BufferedReader bufr=
  7.                         new BufferedReader(new InputStreamReader(System.in));
  8.                 int buf=new Integer(bufr.readLine());

  9.                 int[][] arr=new int[20][20];
  10.                 System.out.println("buf="+buf);
  11.                 int row1=1,col1=1;
  12.                 int i=1,j=1,k=1;
  13.                 int row,col;
  14.                 row=col=buf;
  15.                 do{
  16.                         for(;i<row;i++)
  17.                         arr[j-1][i-1]=k++;
  18.                         row--;
  19.                         for(;j<col;j++)
  20.                         arr[j-1][i-1]=k++;
  21.                         col--;
  22.                         for(;i>col1;i--)
  23.                         arr[j-1][i-1]=k++;
  24.                         col1++;
  25.                         for(;j>row1;j--)
  26.                         arr[j-1][i-1]=k++;
  27.                         row1++;
  28.                         i++;j++;
  29.                 }while(row1<row&&col1<col);
  30.                 arr[i-1][j-1]=k;
  31.                 for(i=0;i<buf;i++){
  32.                         for(j=0;j<buf;j++)
  33.                         {
  34.                         System.out.print(arr[i][j]+"\t");
  35.                         }
  36.                         System.out.println();
  37.                         }
  38.         }
  39. }
复制代码

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
偶的思路:
1.不管n等于几,可以想象成一个人在走迷宫,第一个边向右走走了n个格子,第二个边向下、第三个边向左走了n-1个格子,第四个边向上、第五个边向右走了n-2个格子,第6个边向下走、第7个边向左走了n-3个格子,如此类推,最后走了两个1个格子的边,比如n=4的时候是4、3、3、2、2、1、1,n=5时是5、4、4、3、3、2、2、1、1;
2.所以可以利用循环来设计这个过程,定义两个角标角标来操作走的方向,定义一个变量来控制走的格子数;
其实和拐点差不多,就是得一个数一个数的存进数组,控制好改变方向就行

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
雪人 中级黑马 2013-10-10 07:55:15
7#

谢谢,我会好好看看滴~~
回复 使用道具 举报
雪人 中级黑马 2013-10-10 07:55:43
8#
winsking 发表于 2013-10-9 19:57
偶的思路:
1.不管n等于几,可以想象成一个人在走迷宫,第一个边向右走走了n个格子,第二个边向下、第三个 ...

谢谢~~~我会好好看看滴~~~
回复 使用道具 举报
雪人 中级黑马 2013-10-10 07:56:50
9#
梦航 发表于 2013-10-9 07:34
找到拐点(将其设置为变量)是关键,然后设置输出方式

很好,很简单给力。。。。其实这个想法我也有  但是没写出来代码。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马