杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。
杨辉三角的每一条直线上的数字都是组合数,其组合方法的系数为非负整数。每一行的两端都是1,而每个数字等于它两肩上的数字相加。杨辉还进一步得出,第n行的第m个数字恰好是二项式展开式中第r+1项的系数。
除了具有视觉上的吸引力,杨辉三角还隐藏了一些有趣的数学事实。例如,每行的数字都是斐波那契数列的一部分,而且每个数字都可以表示为连续的奇数和。另外,杨辉三角中的每一个数都是5的倍数,因此可以被5整除。此外,杨辉三角的系数可以表示为组合数,而组合数的计算可以利用递归的方法。
在数学领域,杨辉三角被广泛用于组合数学、数论、代数学、解析几何等领域的研究中。同时,杨辉三角也被应用于计算机科学、物理学、经济学等领域中。
根据以上特性做以下一个简单的Java程序,用于生成杨辉三角:
import java.util.ArrayList;
import java.util.List;
public class YangHuiTriangle {
public static void main(String[] args) {
int rows = 10; // 生成杨辉三角的行数
List<List<Integer>> triangle = new ArrayList<>();
// 初始化第一行
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
triangle.add(firstRow);
// 生成杨辉三角
for (int i = 1; i < rows; i++) {
List<Integer> prevRow = triangle.get(i - 1); // 获取前一行
List<Integer> newRow = new ArrayList<>();
newRow.add(1); // 每一行的第一个元素为1
// 计算每个元素的值
for (int j = 1; j < i; j++) {
int sum = 0;
for (int k = j - 1; k >= 0; k--) {
sum += triangle.get(i - 1).get(k) * triangle.get(i - k - 2).get(j - k);
}
newRow.add(sum);
}
newRow.add(1); // 每一行的最后一个元素为1
triangle.add(newRow);
}
// 打印杨辉三角
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
System.out.printf("%4d", triangle.get(i).get(j));
}
System.out.println();
}
}
}
这个程序使用了一个List<List<Integer>>
类型的变量triangle
来存储杨辉三角的每一行。首先,它初始化第一行,然后使用一个循环来生成其余的行。对于每个元素,它使用组合公式来计算该元素的值。最后,它打印出整个杨辉三角。
以下是该Java程序的继续:
// 打印杨辉三角的前n行,其中n为输入参数
public static void printYangHuiTriangle(int n) {
List<List<Integer>> triangle = new ArrayList<>();
int rows = n;
// 初始化第一行
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
triangle.add(firstRow);
// 生成杨辉三角
for (int i = 1; i < rows; i++) {
List<Integer> prevRow = triangle.get(i - 1); // 获取前一行
List<Integer> newRow = new ArrayList<>();
newRow.add(1); // 每一行的第一个元素为1
for (int j = 1; j <= i; j++) { // 计算每个元素的值
int sum = 0;
for (int k = j - 1; k >= 0; k--) {
sum += prevRow.get(k) * triangle.get(i - j + k).get(j - k);
}
newRow.add(sum);
}
newRow.add(1); // 每一行的最后一个元素为1
triangle.add(newRow);
}
// 打印杨辉三角
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
System.out.printf("%4d", triangle.get(i).get(j));
}
System.out.println();
}
}
该函数接受一个整数参数n,表示要打印杨辉三角的前n行。该函数使用与上面相同的算法生成杨辉三角,并使用双重循环将其打印出来。注意,由于Java中数组和列表的索引从0开始,因此在循环中使用的索引也从0开始。
最后:
// 计算杨辉三角中第row行第col列的元素值
public static int calculateYangHui(int row, int col) {
if (row < 1 || col < 1) {
return 0;
}
if (col == 1 || col == row) {
return 1;
}
int[][] triangle = new int[row][col];
int result = 0;
for (int i = 1; i <= row - 1; i++) {
for (int j = 1; j <= col - 1; j++) {
if (i >= j) {
result += triangle[i - 1][j - 1] * triangle[i - j][j];
}
}
}
return result;
}
该函数接受两个整数参数row和col,表示要计算杨辉三角中第row行第col列的元素值。该函数使用一个二维数组triangle来存储整个杨辉三角,然后使用嵌套循环来计算第row行第col列的元素值。如果row或col小于1,则返回0;如果col等于1或row等于col,则返回1;否则,使用组合公式计算该元素的值。