方阵的主对角线之上称为“上三角”

        请你设计一个用于填充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); // 递归进行内圈填充
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_42565135/article/details/88428162