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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lo_Twilight 中级黑马   /  2015-1-21 22:45  /  1389 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输出 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 个回复

倒序浏览
我研究研究,试一下...
回复 使用道具 举报
  1. <p>晕。大晚上的看见你这题就睡不着了研究了俩小时。。。。</p><p>思路:1、每一行为一个一维数组,元素的顺序按方阵需求排列。使用for循环来为数组赋值。
  2.   2、声明一个变量,用作为数组中每个元素赋值。因为方阵中的数字是从1开始递增的。
  3.    只不过排列的顺序不一样。
  4.    3、假如一个二维数组中有4个一维数组,一维数组中各有4个元素,这代表着方阵的行和列。
  5.   (1) 因为程序是逐行打印的,经观察方阵,发现其右边列为递增,既下标为1,2,3的这三个数组的最大下标的值。我们可以利用for循环进行赋值,</p><p> (2)同理可以将方阵首行的数据直接以一个for循环完成赋值。代码如下;</p><p>关键:1、关键就在用于赋值的这个变量。整个程序都应围绕这个变量的递增来编写循环。好处就在于无需凭空想象,只需按部就班的为相应位置的元素赋值即可。</p><p>
  6. </p><p>package javase基础毕向东;
  7. import java.util.Scanner;
  8. public class Gn {
  9.              public static void main(String[] args)
  10.              {  
  11.                      System.out.println("你想要几行?");
  12.                      Scanner in=new Scanner(System.in);
  13.                      int zqq=in.nextInt();       //用于接收用户输入的行数。</p><p>int[][] arr=new int[zqq][zqq];       //建立一个二维数组。
  14.        int fz=0;            //这个变量最关键,是用来给数组赋值的,整个赋值的过程都应该跟着这个变量走。
  15.        int x=0;
  16.                      int n=(zqq+1)/2;        
  17. for(int y=0;y<n;y++){                    //控制外循环的次数。如用户输入4,既循环2次。</p><p>for(x=y;x<=zqq-y-1;x++){
  18.                                      arr[y][x]=++fz;                              //此为对方阵首行进行赋值,一次搞定首行。如1234
  19.         }
  20.                              for(x=y+1;x<=zqq-y-1;x++){
  21.                                      arr[x][zqq-y-1]=++fz;                   //要跟着fz的变化对数组赋值,比如此时fz的值为5.观察方阵编写循环即可。
  22.         }
  23.                              for(x=zqq-y-2;x>=y;x--){
  24.                                      arr[zqq-y-1][x]=++fz;               //同上,这里赋值的是思路3中(1)。
  25.         }
  26.                              for(x=zqq-y-2;x>=y+1;x--){
  27.                                      arr[x][y]=++fz;                       //同上。注意循环判定条件的变化。
  28.                              }
  29.                      }
  30.                       for(int i=0;i<zqq;i++)          //输出二维数组
  31.                   {
  32.                       for(int j=0;j<zqq;j++){
  33.                          System.out.print(arr[i][j]+" ");
  34.                       }
  35.                       System.out.println();
  36.                   }
  37.            }
  38.         }


  39. </p>
复制代码

吐血三升,我得吃点鸡蛋补补。。。。:dizzy:
回复 使用道具 举报 1 0
:funk:困傻了忘了排版的问题了。看的话还是copy下来自己重排排吧。。
回复 使用道具 举报
这道题思考了半天,没想出来
回复 使用道具 举报
这题很麻烦的。。我看答案代码都看了半天
回复 使用道具 举报
package Test;

/*
* 先不急着输出,而是把数据存在数组里,最后统一输出,便于排版
*/
public class ti1 {
        public static void main(String[] args) {
                int n=5;
                int k=1;
                int[][] num = new int[10][10];
                for (int i = 0; i < (n+1)/2 ; i++) {   //螺旋数组是从外围开始逐渐向里面旋转
                        for (int j = i; j < n-i; j++) {//顶边,从左到右,行不变列变
                                num[i][j] = k++;
                        }
                        for (int j = i+1 ; j < n-i; j++) {//右边,从上到下,行变列不变
                                num[j][n-i-1] = k++;
                        }
                        for(int j=n-i-2;j >=i;j--)     //底边,从右到左,行不变列变
                    num[n-i-1][j]=k++;
                       
            for(int j=n-i-2 ; j >= i+1 ;j--)   //左边,从下到上,行变列不变
                num[j][i]=k++;         
                }
               
                for (int i = 0; i < n; i++) {      //输出数组,加入空格和回车进行排版
                        for (int j = 0; j < n; j++) {
                                if (num[i][j]<10) {
                                        System.out.print(" "+num[i][j]+" ");
                                }else {
                                        System.out.print(num[i][j]+" ");
                                }
                        }
                        System.out.println("\r\n");
                }
        }
}

回复 使用道具 举报
2楼 加个 制表符是不是好一点~
回复 使用道具 举报
自己调试将输入数值比较大时就排列完全错乱了
回复 使用道具 举报
这个我也写不出来,弱爆了
回复 使用道具 举报
一圈一圈打出来,第一圈每边四个元素,第2圈每边2个元素,找规律,递归打印。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马