黑马程序员技术交流社区

标题: 从1开始的自然数由方阵的最外圈向内螺旋方式地顺序... [打印本页]

作者: 史世锋    时间: 2015-10-19 21:23
标题: 从1开始的自然数由方阵的最外圈向内螺旋方式地顺序...
  1. package com.itheima;

  2. public class Test075
  3. {

  4.         /** 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
  5.          *  01 02 03 04
  6.          *  12 13 14 05
  7.          *  11 16 15 06
  8.          *  10 09 08 07
  9.          *  
  10.          *  1:         2:   1 2     3:   1 2 3        4:  1      2      3     4         5:     1       2       3       4       5
  11.          *      1               4 3             8 9 4              12   13   14   5                   16    17     18     19     6
  12.          *                                               11   16   15   6               15     24     25     20    7
  13.          *                                               10     9     8    7              14      23    22     21    8
  14.          *                                                                                    13     12      11    10    9
  15.          * 思路:                        
  16.          * 定义两个变量hang和lie记录元素的坐标
  17.          * 每一圈的第一个数组元素的坐标是arr[hang][hang],第一行的最后一个元素的坐标是arr[hang][lie]   
  18.          * 每转一圈 hang比上一圈大1 lie比上一圈小1               
  19.          * @param args                                
  20.          */
  21.         public static void main(String[] args)
  22.         {
  23.                 printArrays(13);
  24.         }
  25.        
  26.         public static void printArrays(int num)
  27.         {
  28.                 int[][] arr = new int[num][num];
  29.                
  30.                 //第一次hang=0,lie=num-1
  31.                 printArray(arr, 0, num-1, 1);
  32.                
  33.                 //遍历打印这个二维数组
  34.                 for(int i = 0; i < arr.length; i++)
  35.                 {
  36.                         for(int j = 0; j < arr[i].length; j++)
  37.                         {
  38.                                 System.out.print(arr[i][j] +"\t");
  39.                         }
  40.                         System.out.println();
  41.                 }
  42.         }
  43.         //一圈一圈的赋值
  44.         public static void printArray(int[][] arr,int hang, int lie ,int count)
  45.         {
  46.                 if(hang > lie)
  47.                         return;
  48.         if(hang==lie)
  49.                 {
  50.                         arr[hang][hang] = count;
  51.                         return;
  52.                 }
  53.                 //给矩阵的第一行赋值
  54.                 for(int a = hang; a <= lie; a++, count++)
  55.                 {
  56.                         arr[hang][a] = count;
  57.                 }

  58.                 //给矩阵的最后一竖列赋值
  59.                 for(int a = hang+1; a < lie; a++,count++)
  60.                 {
  61.                         arr[a][lie] = count;
  62.                 }
  63.                
  64.                 //给矩阵的最后一行赋值
  65.                 for(int a = lie ; a >= hang; a--,count++)
  66.                 {
  67.                         arr[lie][a] = count;
  68.                 }
  69.                
  70.                 //给矩阵的第一竖行赋值
  71.                 for(int a = lie-1; a > hang; a--,count++)
  72.                 {
  73.                         arr[a][hang] = count;
  74.                 }
  75.                
  76.                 //递归调用
  77.                 printArray(arr, ++hang, --lie, count);
  78.         }
  79. }
复制代码


作者: 史世锋    时间: 2015-10-19 21:25
好不容易排好的事例,还是乱了。。。




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