黑马程序员技术交流社区
标题:
从1开始的自然数由方阵的最外圈向内螺旋方式地顺序...
[打印本页]
作者:
史世锋
时间:
2015-10-19 21:23
标题:
从1开始的自然数由方阵的最外圈向内螺旋方式地顺序...
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);
}
}
复制代码
作者:
史世锋
时间:
2015-10-19 21:25
好不容易排好的事例,还是乱了。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2