c語(yǔ)言實(shí)現(xiàn)組合數(shù) c語(yǔ)言的這個(gè)組合數(shù)怎么編程序呢?
c語(yǔ)言的這個(gè)組合數(shù)怎么編程序呢?由于數(shù)據(jù)比較大,你不能通過(guò)組合數(shù)的計(jì)算公式C(m,n)=m!/(n!(m-n)!)直接來(lái)求(因?yàn)闀?huì)溢出),可以根據(jù)C(m,n)=C(m-1,n) C(m-1,n-1),
c語(yǔ)言的這個(gè)組合數(shù)怎么編程序呢?
由于數(shù)據(jù)比較大,你不能通過(guò)組合數(shù)的計(jì)算公式C(m,n)=m!/(n!(m-n)!)直接來(lái)求(因?yàn)闀?huì)溢出),可以根據(jù)C(m,n)=C(m-1,n) C(m-1,n-1),C(i,0)=1,c(i,i)=1來(lái)求,用a[i][j]來(lái)表示C(i,j),通過(guò)循環(huán)求出來(lái)C(m,n)
C語(yǔ)言編程:按所給的公式計(jì)算組合數(shù)并輸出結(jié)果:Cmn(m在上n在下)=n!/[(n-m)!m!]?
我理解是這樣的輸入輸出,如果是這樣的輸入輸出的話,代碼如下:#include<stdio.h>#define N 34main(){ int i,j,a[N][N],n for(i=0i<Ni ) a[i][0]=a[i][i]=1 for(i=2i<Ni ) { for(j=1j<ij ) a[i][j]=a[i-1][j] a[i-1][j-1] } for(i=0i<Ni ) while(scanf("%d",&n),n>=0) { for(i=0i<ni ) printf("%d ",a[n][i]) printf("%dn",a[n][n]) } return 0}
組合方式計(jì)算公式?
組合計(jì)算公式:c(n,m)=c(n-1,m-1) c(n-1,m)。
等式左邊表示從n個(gè)元素中選取m個(gè)元素,而等式右邊表示這一個(gè)過(guò)程的另一種實(shí)現(xiàn)方法:任意選擇n中的某個(gè)備選元素為特殊元素,從n中選m個(gè)元素可以由此特殊元素的被包含與否分成兩類(lèi)情況,即m個(gè)被選擇元素包含了特殊元素和m個(gè)被選擇元素不包含該特殊元素。前者相當(dāng)于從n-1個(gè)元素中選出m-1個(gè)元素的組合,即c(n-1,m-1);后者相當(dāng)于從n-1個(gè)元素中選出m個(gè)元素的組合,即c(n-1,m)。
c(n,0) c(n,1) c(n,2) …… c(n,n)=2的n次方。