1、首先总结出杨辉三角的规律:第n行的m个数可表示为 C(n-1,m-1)。
2、找出第n行第m个数是我们应该打印的第几个数
由图可以看出每一行的两个数之间都需要打印一个空格,
所以我们要打印出来的第m个数应该是该行实际的第2 * m - 1 个数。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
3、然后根据这个规律来编写java代码。
package sort;
import java.util.Scanner;
public class Trigon1 {
public static void main(String[] args) {
Scanner temp = new Scanner(System.in);
System.out.println("请输入杨辉三角的行数");
int n = temp.nextInt();
way(n);
}
/*
* 打印三角前面的空格
*/
public static void way(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
System.out.print(" ");
}
/*
* 打印三角里面的数值
*/
for (int j = 1; j <= 2 * i - 1; j++) {
if (i == 1) {
System.out.print("1");
} else {
if (j % 2 == 0) {// 打印每两个数值之间 的空格
System.out.print(" ");
} else {// 根据总结出来的规律打印出第i行第j个数的数值
if (j == 1) {
System.out.print("1");
} else {
int a = Mnlti((j + 1) / 2 - 1);// 调用阶乘的那个封装
int b = Mnlti1(i - 1, (j + 1) / 2 - 1);// 调用从n乘到j那个封装。
System.out.print(b / a);
}
}
}
}
System.out.println("");
}
}
public static int Mnlti(int n) {// n的阶乘的方法的封装
return (n == 1 || n == 0) ? n : n * Mnlti(n - 1);
}
public static int Mnlti1(int n, int j) {// 从n乘到j的阶乘的封装
int c = n;
n = 1;
for (int i = c; i > c - j; i--) {
n *= i;
}
return n;
}
}
结果,当输入的n=8的时候,输出的结果如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1