- package com.itheima;
- public class Test075
- {
- /** 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
- * 01 02 03 04
- * 12 13 14 05
- * 11 16 15 06
- * 10 09 08 07
- *
- * 1: 2: 1 2 3: 1 2 3 4: 1 2 3 4 5: 1 2 3 4 5
- * 1 4 3 8 9 4 12 13 14 5 16 17 18 19 6
- * 11 16 15 6 15 24 25 20 7
- * 10 9 8 7 14 23 22 21 8
- * 13 12 11 10 9
- * 思路:
- * 定义两个变量hang和lie记录元素的坐标
- * 每一圈的第一个数组元素的坐标是arr[hang][hang],第一行的最后一个元素的坐标是arr[hang][lie]
- * 每转一圈 hang比上一圈大1 lie比上一圈小1
- * @param args
- */
- public static void main(String[] args)
- {
- printArrays(13);
- }
-
- public static void printArrays(int num)
- {
- int[][] arr = new int[num][num];
-
- //第一次hang=0,lie=num-1
- printArray(arr, 0, num-1, 1);
-
- //遍历打印这个二维数组
- for(int i = 0; i < arr.length; i++)
- {
- for(int j = 0; j < arr[i].length; j++)
- {
- System.out.print(arr[i][j] +"\t");
- }
- System.out.println();
- }
- }
- //一圈一圈的赋值
- public static void printArray(int[][] arr,int hang, int lie ,int count)
- {
- if(hang > lie)
- return;
- if(hang==lie)
- {
- arr[hang][hang] = count;
- return;
- }
- //给矩阵的第一行赋值
- for(int a = hang; a <= lie; a++, count++)
- {
- arr[hang][a] = count;
- }
- //给矩阵的最后一竖列赋值
- for(int a = hang+1; a < lie; a++,count++)
- {
- arr[a][lie] = count;
- }
-
- //给矩阵的最后一行赋值
- for(int a = lie ; a >= hang; a--,count++)
- {
- arr[lie][a] = count;
- }
-
- //给矩阵的第一竖行赋值
- for(int a = lie-1; a > hang; a--,count++)
- {
- arr[a][hang] = count;
- }
-
- //递归调用
- printArray(arr, ++hang, --lie, count);
- }
- }
复制代码
|
|