码迷,mamicode.com
首页 > 其他好文 > 详细

运用对数函数<计算组合数>

时间:2018-02-02 18:32:56      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:自己   函数   组合数   post   运用   for   思路   png   printf   

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

C(n,m) = n! / [ m!(n-m)! ]

技术分享图片

以下思路借鉴于某位大神,为了方便自己理解,我稍微做了些整理。

希望能帮助到和我一样热爱学习的小白=-=~

#include "stdio.h"
#include "math.h" 
double lncom(int n,int m)     //在c语言中,log函数也就是我们通常所说的ln函数,即以e为底的对数函数
{
    double s1=0,s2=0,i;       //s1=n!/m!  s2=1/(n-m)!
    
    if(m<n/2.0)m=n-m;         //如果上标小于下标的一半,此时m<n-m,令m=n-m,使计算更加快捷
       
    for(i=m+1;i<=n;i++)       //s1作为分子,从m+1累乘至n
    s1=s1+log(i);
    
    for(i=2;i<=n-m;i++)       //s2作为分母,从1累乘至n-m
    s2=s2+log(i);
    
    return s1-s2;             
}
double com(int n,int m)
{
    if(n<m)return 0;          //因为n≥m,所以这种情况不存在
    
    return exp(lncom(n,m));   //把经过处理的组合数还原出来
}
int main()
{
    int n,m;                   //n是下标,m是上标
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        printf("%lf\n",com(n,m));
    } 
    return 0;
}

 

运用对数函数<计算组合数>

标签:自己   函数   组合数   post   运用   for   思路   png   printf   

原文地址:https://www.cnblogs.com/kannyi/p/8406088.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!