规律
- 第n行有n个数字.
- 每一行的开始和结尾数字都为1,用二维数组表示就是a[i][0]=1; a[i][j]=1(当i==j时);
- 第n+1行的第i个数字等于第n行的i-1个数字加上第n行的i个数字,用二维数组表示就是 a[i][j]=a[i-1][j-1]+a[i-1][j];
实现思路:
- 使用一个二维数组,完成规律一;
- 初始化赋值开始和结尾的数据,完成规律二;
- 使用
a[i][j]=a[i-1][j-1]+a[i-1][j]
实现中间值赋值,规律三; - 使用循环,非零输出显示,进行选择形状打印显示;
- 最后每行空格的个数为 n-i (n为总行数,i为第几行)
不先打印空格
代码
public static void yhTrangle(int n) {
// 使用二维数组
int array[][] = new int[n][n];
// 进行数组初始化的赋值
for (int i = 0; i < n; i++) {
array[i][0] = 1;
array[i][i] = 1;
}
// 赋值中间的值
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
}
}
// 打印正金字塔
for (int i = 0; i < n; i++) {
// 先打印空格
for (int k = 0; k < n - i; k++) {
System.out.print(" ");
}
// 输出数据
for (int j = 0; j <= i; j++) {
//进行一个判断是否是每一行的最后一个,是就不打印空格了
if (array[i][j] != 0) {
if (i != j) {
System.out.print(array[i][j] + " ");
} else {
System.out.print(array[i][j]);
}
}
}
System.out.println();
}
//分割线
System.out.println("***********");
// 打印倒金字塔
for (int i = n - 1; i >= 0; i--) {
// 先打印空格
for (int k = 0; k < n - i; k++) {
System.out.print(" ");
}
// 输出数据
for (int j = 0; j <= i; j++) {
//进行一个判断是否是每一行的最后一个,是就不打印空格了
if (array[i][j] != 0) {
if (i != j) {
System.out.print(array[i][j] + " ");
} else {
System.out.print(array[i][j]);
}
}
}
System.out.println();
}
}
测试
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入杨辉三角的行数n:");
int n = sc.nextInt();
yhTrangle(n);
}
}