黑马程序员技术交流社区
标题:
二维数组打印。这道题还有没有更简单的算法?
[打印本页]
作者:
大自然的搬运工
时间:
2015-11-2 21:14
标题:
二维数组打印。这道题还有没有更简单的算法?
/*
* 9、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
* 示例
* 1 2 3 4
* 12 13 14 5
* 11 16 15 6
* 10 9 8 7
*思路:1.给二维数组复制肯定使用循环
* 2.找规律,然后循环
* 3.每一圈为一次大循环,然后四个边各遵循一个规律,总结归路
* 4.打印
*/
public class Test9 {
public static void main(String[] args) {
int n = 6;
int count = 1;
int[][] arr = new int[n][n];
// 循环圈数,以大圈为准,大圈规律,开始数组角标x=y=z;z表示第z-1圈
for (int z = 0; z < (n + 1) / 2; z++) {
// 上横排规律,x不变,y自增
for (int x = z, y = z; y < n - z - 1; y++) {
arr[x][y] = count++;
}
// 右竖排,y不变,x自增
for (int x = z, y = n - z - 1; x < n - z - 1; x++) {
arr[x][y] = count++;
}
// 下横排,x不变,y自减
for (int x = n - z - 1, y = x; y >= z; y--) {
arr[x][y] = count++;
}
// 右竖排,y不变,x自减
for (int x = n - z - 2, y = z; x > z; x--) {
arr[x][y] = count++;
}
}
// 打印
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(" " + arr
[j]);
}
System.out.println();
System.out.println();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2