请你设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[][] a = new int[n][];
for (int i = 0; i < a.length; i++)
a[i] = new int[a.length - i];
show(a, 0, 1);// 从第零行开始,第一个为1
for (int i = 0; i < n; i++) {
for (int j = 0; j < a[i].length; j++)
System.out.print(a[i][j] + " ");
System.out.println();
}
}
public static void show(int[][] m, int k, int num) {
if (k >= m.length / 2)
return;
// 第一行
for (int i = k; i < m[k].length - k; i++) {
m[k][i] = num++;
}
// 最后一位
for (int i = k + 1; i < m[k].length - k; i++) {
m[i][m[i].length - 1 - k] = num++;
}
// 左列
for (int i = m[k].length - 2 - k; i > k; i--) {
m[i][k] = num++;
}
show(m, k + 1, num); // 递归进行内圈填充
}
}