折叠方阵。n阶回转折叠方阵是把起始数1置于方阵的左上角,然后从起始数开始递增,偶数层从第1行开始,先竖向下再折转向右:奇数层从第1列开始,先横向右再竖向上,呈首尾连接,层层折叠地排列为回转折叠方阵。如图所示。设计递归算法,编程实现。
请输入:5
1 2 9 10 25
4 3 8 11 24
5 6 7 12 23
16 15 14 13 22
17 18 19 20 21
/*
* 分析:主要是分析流程(规律)
*
* 1.从 上 到 下
* | ^
* | | 4.
* | | 从
* V | 下
* <- - - - - | 往
* 2. 从 右 往 左 | 上
* |
* - - - - - - - - ->
* 3.从 左 往 右
*
*
*
*/
import java.util.Scanner;
public class Matrix {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入:");
int n = input.nextInt();
int value = 0;
int x = 0,y=0;
int num[][] = new int[n][n];
num[x][y] = ++value;
while(n>1){
if (x == 0) {
y++;
while (y >= x) { // 从上到下,从2开始算
num[x][y] = ++value;
x++;
}
x--;y--;
while (y >= 0) {// 从右往左
num[x][y] = ++value;
y--;
}
y++;
}
if (x >= n - 1 || y >= n - 1)
break;
if (y == 0) {
x++;
while (y <= x) { // 从左往右
num[x][y] = ++value;
y++;
}
y--;x--;
while (x >= 0) {// 从下往上
num[x][y] = ++value;
x--;
}
}
x++;
if (x >= n - 1 || y >= n - 1)
break;
}
//遍历二维数组
for (int i = 0; i < num.length; i++) {
for (int j = 0; j < num[i].length; j++)
System.out.printf("%4d", num[i][j]);
System.out.println();
}
}
}