靚麗時尚館

位置:首頁 > 健康生活 > 心理

c語言求組合數計算公式

心理1.98W
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除不盡帶來誤差

}

標籤:語言