kannyi

先贴上一张组合数的基本公式吧,在这里我们暂且规定n为下标,m为上标(n≥m)

①普通方法计算组合数

int com(int n,int m)
{
    int s=1;
    for(int i=1;i<=m;i++)
        s=s*(n+1-i)/i;
    return s;
}

②运用对数函数计算组合数(可以用于处理较大的数值)

(1) 在c语言中,log函数也就是我们通常所说的ln函数,即以e为底的对数函数

(2) s1作为分子,从m+1累乘至n;s2作为分母,从1累乘至n-m;

(3) 最后再用exp函数把经过处理的组合数还原出来

double lncom(int n,int m)
{
    double s1=0,s2=0,i;
    if(m<n/2.0)
        m=n-m;
    for(i=m+1;i<=n;i++)
        s1=s1+log(i);
    for(i=2;i<=n-m;i++)
        s2=s2+log(i);
    return s1-s2;             
}
double com(int n,int m)
{
    if(n<m)
        return 0;
    return exp(lncom(n,m));
}

分类:

技术点:

相关文章:

  • 2021-10-08
  • 2021-05-08
  • 2021-02-20
  • 2021-10-31
  • 2021-10-11
  • 2021-10-11
  • 2021-10-01
  • 2021-10-01
猜你喜欢
  • 2021-09-25
  • 2021-09-25
  • 2021-11-20
  • 2022-01-21
  • 2021-10-11
相关资源
相似解决方案