杨辉三角(Pascal's Triangle)是一个二维数组,其每一行的数字是上一行相邻两个数字之和。
一、杨辉三角的构建:
模板①(无空格)
#include <iostream>
using namespace std;
void printPascalTriangle(int n) {
int triangle[n][n]; // 创建一个二维数组来存储杨辉三角
// 初始化第一列和对角线元素为1
for (int i = 0; i < n; i++) {
triangle[i][0] = 1;
triangle[i][i] = 1;
}
// 填充剩余的元素
for (int i = 2; i < n; i++) {
for (int j = 1; j < i; j++) {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
}
// 打印杨辉三角
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cout<<triangle[i][j];
}
cout<<endl;
}
}
int main() {
int n;
printf("请输入杨辉三角的行数: ");
cin>>n;
printPascalTriangle(n);
return 0;
}
模板②(有空格)
#include <iostream>
using namespace std;
void generatePascalTriangle(int n) {
int triangle[n][n]; // 创建一个二维数组来存储杨辉三角
// 逐行生成杨辉三角形
for (int i = 0; i < n; ++i) {
// 初始化第一列和对角线元素为1
triangle[i][0] = triangle[i][i] = 1;
// 计算每行中间的元素
for (int j = 1; j < i; ++j) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
}
// 打印杨辉三角形
for (int i = 0; i < n; ++i) {
// 打印每行的元素,用空格隔开
for (int space = 0; space < n - i - 1; ++space) {
cout<<" "; // 打印空格对齐
}
for (int j = 0; j <= i; ++j) {
cout<<triangle[i][j]<<" ";
}
cout<<endl;
}
}
int main() {
int n;
cout<<"请输入杨辉三角的行数:";
cin>>n;
generatePascalTriangle(n);
return 0;
}
二、杨辉三角的性质:
-
每行数字左右对称,由1开始逐渐变大。
-
第n行的数字有n项。
-
前n行共[(1+n)n]/2 个数。
-
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
-
第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。
-
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
-
(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
-
将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。