【算法竞赛】杨辉三角 | 杨辉三角与组合数的关系 | 杨辉三角的算法应用 | c++代码实现公式获取杨辉三角位置的值

杨辉三角是一种展示二项式系数的几何形式,它揭示了从n个元素中无序选取k个元素的组合数规律。通过杨辉三角的递推公式,可以计算出特定位置的二项式系数。此外,代码实现进一步展示了如何有效地获取杨辉三角的值,并验证了二项式定理。组合数公式提供了另一种计算组合数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

杨辉三角详解

杨辉三角是什么?

杨慧三角是二项式系数在三角形中的一种集合排列!!

换一种说法: 杨辉三角是二项式系数, 通过数据三角形表示, 发现的数学规律.
在这里插入图片描述

杨辉三角与二项式系数联系

定义: 在数学里, 二项式系数, 或组合数, 是定义为形如(1+x)n(1 + x)^n(1+x)n展开后x的系数(其中n为自然数, k为整数)

那么一般二项式(x+y)n(x + y)^n(x+y)n 的幂可用二项式系数记为CnrC^r_nCnr

通常来讲,二项式系数代表的是从n件物品中,无序地选取k件的方法总数.

证明二项式系数与组合数之间的联系:

假设n = 4, k = 2. 通过组合数公式可以得到组合数为 6.

假如我们把(1+x)4(1 + x)^4(1+x)4 展开并标记每一个x, 就会得到:

(1+x1)(1+x2)(1+x3)(1+x4)(1+x_1)(1+x_2)(1+x_3)(1+x_4)(1+x1)(1+x2)(1+x3)(1+x4)
上式等于:
(1+x1)⋯(1+x4)=⋯+x1x2+x1x3+x1x4+x2x3+x2x4+x3x4+⋯(1+x_1)⋯(1+x_4)=⋯+x_1x_2+x_1x_3+x_1x_4+x_2x_3+x_2x_4+x_3x_4+⋯(1+x1)(1+x4)=+x1x2+x1x3+x1x4+x2x3+x2x4+x3x4+

假如把标记去掉, 那么x2x^2x2的系数正好是等于6, 与C42C_4^2C42相符合

也就证明了:(1+x)n(1+x)^n(1+x)nxkx^kxk的系数正好等于从n个元素中选取k个元素的组合数(CnkC^k_nCnk.

在这里插入图片描述

杨辉三角代码实现的递推公式

C[i][j]=C[i−1][j]+C[i−1][j−1];C[i][j]=C[i−1][j]+C[i−1][j−1];C[i][j]=C[i1][j]+C[i1][j1];

1

1	1

1	2	1

1	3	3	1

1	4	6	4	1

递推:

#include<bits/stdc++.h>
using namespace std;
map<int, map<int, int> >mp;
int main()
{
    mp[0][0] = 1;
    //输入一个row, col表示待查找的行和列, 输出其对应杨辉三角的值
    int row, col; cin >> row >> col;
    for(int i = 1;i <= row; i++)
        for(int j = 1;j <= i; j++){
            mp[i][j]=mp[i - 1][j] + mp[i - 1][j - 1];
            if(i == row && j == col){ cout << mp[i][j]; return 0; }
        }
    return 0;
}

组合数公式:

Cnm=Anmm!=n!m!(n−m)!C^m_n=\frac{A^m_n}{m!}=\frac{n!}{m!(n−m)!}Cnm=m!Anm=m!(nm)!n!

#include<bits/stdc++.h>
using namespace std;
//求阶乘
int fun1(int num){
    int ans = 1;
    for(int i = 1;i <= num; i++){
        ans *= i;
    }
    return ans;
}
// 求组合数
int fun2(int a, int b){
    return fun1(a) / (fun1(a) * fun1(a - b));
}
int main()
{
    int row, col;
    cin >> row >> col;
    cout << fun2(row - 1, col - 1);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MuShan-bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值