import java.util.Scanner;
public class ShowYangHuiTrangle {
public static void main(String[] args) {
System.out.print("请输入你要打印的层数:");
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
scan.close();
//定义打印杨辉三角的类
YangHuiTrangle trangle = new YangHuiTrangle();
System.out.println("打印的" + n + "层杨辉三角如下:");
if (n % 2 == 0) {//行数为偶数时
trangle.trangleOdd(n);
} else {//行数为奇数时
trangle.trangleEven(n);
}
}
}
class YangHuiTrangle {
/**
* 当n为偶数时采取的策略
*
* @param n 行数
*/
public void trangleOdd(int n) {
// 定义需要用到的矩阵为杨辉三角元素行数和最底层元素个数*2-1
int[][] array = new int[n][2 * n - 1];
array[0][n - 1] = 1;// 第一行的第n-1个位起始元素置为一
for (int i = 1; i < n; i++) {// 从第二行开始计算
for (int j = 0; j < 2 * n - 1; j++) {
// 如果不是每行最后一个元素则其值为上一行该位置前后两个元素和
if (j != 0 && j != 2 * n - 2) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j + 1];
}
}
}
// 最后一行第一个元素和最后一个元素置1
lastLine(n, array);
// 调整输出样式
format(n, array);
}
/**
* 当n为奇数时采取的策略
*
* @param n 行数
*/
public void trangleEven(int n) {
// 定义需要用到的矩阵为杨辉三角元素行数和最底层元素个数*2-1
int[][] array = new int[n][2 * n - 1];
array[0][n - 1] = 1;// 每行的第n-1个位起始元素置为一
for (int i = 1; i < n; i++) {
for (int j = 0; j < 2 * n - 1; j++) {
if (j != 0 && j != 2 * n - 2) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j + 1];
}
}
}
// 最后一行第一个元素和最后一个元素置1
lastLine(n, array);
// 调整输出样式
format(n, array);
}
/**
* 最后一行的首尾元素均为1
*
* @param n 行数
* @param array 存放三角数据的集合
*/
public void lastLine(int n, int[][] array) {
array[n - 1][0] = 1;
array[n - 1][2 * n - 2] = 1;
}
/**
* 格式化需要的输出效果
*
* @param n 打印的行数
* @param array 存放打印元素的数组
*/
public void format(int n, int[][] array) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2 * n - 1; j++) {
if (array[i][j] == 0) {
System.out.print(" ");
} else if (array[i][j] < 10) {
System.out.print(array[i][j] + " ");
} else if (array[i][j] >= 10) {
System.out.print(array[i][j] + " ");
} else if (array[i][j] >= 100) {
System.out.print(array[i][j] + " ");
}
}
//换行
System.out.println();
}
}
}
java打印杨辉三角
最新推荐文章于 2023-01-19 21:36:12 发布