本帖最后由 xuecmg 于 2016-2-24 17:14 编辑
- /*
- * 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
- *
- * 1 2 3 4
- *12 13 14 5
- *11 16 15 6
- *10 9 8 7
- **/
- public class Exam6 {
- public static void main(String[] args) {
- int[][] arr = new int[6][6]; //创建n维的二维数组
- int num = 1; //设置螺旋数字初始值
- int layer = 0; //设置开始螺旋的层数,0代表第外层
- diguiluoxuan(arr, num, layer); //调用方法,生成以num为初始值,从第layer层开始的螺旋数字
- for (int i = 0; i < arr.length; i++) {
- for (int j = 0; j < arr.length; j++) {
- System.out.print(arr[i][j] + "\t");
- }
- System.out.println();
- }
- }
- public static void diguiluoxuan(int[][] arr, int num, int layer) {
- for (int i = layer; i <= arr.length - 1 - layer; i++) { //生成当前层的上面
- arr[layer][i] = num++;
- }
- for (int i = layer+1; i <= arr.length - 1 - layer; i++) { //生成当前层的右面
- arr[i][arr.length - 1 - layer] = num++;
- }
- for (int i = arr.length -2 - layer; i >= layer; i--) { //生成当前层的下面
- arr[arr.length - 1 - layer][i] = num++;
- }
- for (int i = arr.length -2 - layer; i >= layer+1; i--) { //生成当前层的左面
- arr[i][layer] = num++;
- }
- if ((arr.length - 1)/2 - layer <= 0) { //停止条件。
- return;
- }
- diguiluoxuan(arr, num, ++layer); //递归调用,计算下一层
- }
-
- }
复制代码
|
|