C语言求组合数

Python013

C语言求组合数,第1张

double fact(long num)

{

    for (long i = 1 num > 0 num--)

    {

        i *= num

    }    

}

int main()

{

    long m

    long n

    long C

    

    scanf("%ld %ld", &m, &n)

    

    C = fact(n) / ((fact(m)) * fact(n-m))

    

    printf("%ld",C)

    

    return 0

}

C(n,m) ----------n是下标 , m是上标 (C上面m,下面n),C(n,m) 表示 n选m的组合数,等于从n开始连续递减的m个自然数的积除以从1开始连续递增的m个自然数的积。

例子:

C(8,3)=8*7*6/(1*2*3) =56

分子是从8开始连续递减的3个自然数的积

分母是从1开始连续递增的3个自然数的积

扩展资料

1、组合定义

组合(combination),数学的重要概念之一。从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。

2、组合总数

组合总数(total number of combinations)是一个正整数,指从n个不同元素里每次取出0个,1个,2个,…,n个不同元素的所有组合数的总和。

3、重复组合

重复组合(combination with repetiton)是一种特殊的组合。从n个不同元素中可重复地选取m个元素。不管其顺序合成一组,称为从n个元素中取m个元素的可重复组合。当且仅当所取的元素相同,且同一元素所取的次数相同,则两个重复组合相同。

参考资料:百度百科-组合

如果是指 从m个不同元素中取出n(n≤m)个元素的所有组合的个数 的话

#include"stdio.h"

int fac(int n) /*阶乘函数*/

{

int s,i

s=1

for(i=1i<=ni++)

{

s*=i

}

return(s)

}

main()

{

int n,m,c

scanf("%d %d",&m,&n)

c=fac(m)/(fac(n)*fac(m-n))

printf("%d\n",c)

}