L8.5 - 数学专题:杨辉三角的编程妙用(拓展)
一、杨辉三角是什么?
1. 数字金字塔
外观特点:
每一行数字左右对称,像金字塔一样逐层增加
第n行有n个数字,首尾都是1,中间数字=上层两数之和
示例(前5行):
1 2 3 4 5
| 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
|
二、用C++生成杨辉三角
1. 二维数组生成法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream> #include <vector> using namespace std;
vector<vector<int>> generatePascal(int n) { vector<vector<int>> triangle(n); for(int i=0; i<n; i++) { triangle[i].resize(i+1, 1); for(int j=1; j<i; j++) { triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]; } } return triangle; }
int main() { auto tri = generatePascal(5); for(auto& row : tri) { for(int num : row) cout << num << " "; cout << endl; } }
|
三、杨辉三角的编程妙用
1. 快速查组合数
秘密:第n行第k个数 = 从(n-1)个物品选(k-1)个的组合数 C(n-1, k-1)
应用示例:查C(4,2)=6
1 2
| auto tri = generatePascal(5); cout << "C(4,2) = " << tri[4][2];
|
2. 多项式展开系数
二项式定理:
(a + b) ^ n的展开系数 = 杨辉三角第(n + 1)行
示例:
(a + b) ^ 3 = 1a³ + 3a²b + 3ab² + 1b³
对应杨辉三角第4行:1 3 3 1
四、趣味编程挑战
1. 打印圣诞树
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void printChristmasTree(int height) { auto tri = generatePascal(height); for(auto& row : tri) { cout << string(height - row.size(), ' '); for(int num : row) { cout << num << " "; } cout << endl; } }
printChristmasTree(5);
|
2. 数字金字塔游戏
1 2 3 4 5 6 7 8 9 10
| bool checkPascal(vector<vector<int>> userInput) { for(int i=2; i<userInput.size(); i++) { for(int j=1; j<i; j++) { if(userInput[i][j] != userInput[i-1][j-1]+userInput[i-1][j]) return false; } } return true; }
|
五、核心知识点总结
内容 |
关键点 |
编程应用 |
生成方法 |
二维数组 + 递推公式 |
理解数组嵌套 |
组合数查询 |
行数-1,列数-1对应C(n,k) |
快速数学计算 |
对称性应用 |
只计算前半部分 |
优化程序效率 |
动态规划思想 |
当前状态依赖前一个状态 |
算法思维训练 |