当前位置:柔美女性网 >

绿色生活 >心理 >

c语言求组合数计算公式

c语言求组合数计算公式

c语言求组合数计算公式

代码如下。

#include&ltstdio.h>

int prime[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 }

int len = 10

int factors1[10]

int factors2[10]

void decompose(int* factors, int m, int n)

c语言求组合数计算公式

C(n,m)=A(n,m)/m!=n!/m!(n-m)!与C(n,m)=C(n,n-m)。(n为下标,m为上标)。例如C(4,2)=4!/(2!*2!)=4*3/(2*1)=6,C(5,2)=C(5,3)。

排列组合c计算方法:C是从几个中选取出来,不排列,只组合。

C(n,m)=n*(n-1)*...*(n-m+1)/m!

例如c53=5*4*3÷(3*2*1)=10,再如C(4,2)=(4x3)/(2x1)=6。

c语言求组合数计算公式

C语言求组合数不能直接使用数学公式C(n,m)=(m!)/(n!*(n-m)!)即使VC 6.0的int是32bit,但其实当计算到17!时候就会溢出,所以需要另辟蹊径。

先来把公式变形。

(m!)/(n!*(m-n)!)=(m*(m-1)*(m-2)*…*(m-n+2)*(m-n+1))/(n!)=((m-n+1)/1)*((m-n+2)/2)*((m-n+3)/3)*…*((m-n+n)/n)=∏((m-n+k)/k)【k=1,2,3,…,n】     这样,一项一项的算,就避免了求阶乘的路,下面上程序:

#include

#include

int main(int argc, char* argv[])

{

int isum=1

int m,n,k

printf("input m=")

scanf("%d",&m)

printf("Input n=")

scanf("%d",&n)

for(k=1k<=nk++)

{

isum=(isum*(m-n+k))/k//先算乘法,避免先算(m-n+k)/k除不尽带来误差

}

标签: 语言
  • 文章版权属于文章作者所有,转载请注明 https://rmnxw.com/lvse/xinli/j29qqz.html