求一個組合,如C(16,3),我們可以通過公式求出這有多少個數,但怎麼把這些數表示出來呢?
代碼:
<SPAN style="FONT-SIZE: 18px">#include<iostream> #include<stdio.h> #define MAXN 100 using namespace std; int a[MAXN]; int count=0; void assem(int m,int k) { int i,j; for (i=m;i>=k;i--) { a[k]=i; if (k>1) assem(i-1,k-1); else { count++; /*顯示排列數 for (j=a[0];j>0;j--) { cout<<a[j]<<" "; } cout<<endl;*/ } } } int main() { int m,r; cout<<"m="; cin>>m; cout<<"r="; cin>>r; a[0]=r; assem(m,r); cout<<count<<endl; return 0; } </SPAN> #include<iostream> #include<stdio.h> #define MAXN 100 using namespace std; int a[MAXN]; int count=0; void assem(int m,int k) { int i,j; for (i=m;i>=k;i--) { a[k]=i; if (k>1) assem(i-1,k-1); else { count++; /*顯示排列數 for (j=a[0];j>0;j--) { cout<<a[j]<<" "; } cout<<endl;*/ } } } int main() { int m,r; cout<<"m="; cin>>m; cout<<"r="; cin>>r; a[0]=r; assem(m,r); cout<<count<<endl; return 0; }
例如,我們要求C(16,3),我們應該是先從16個數裡取1個數【變成C(16,1)】,再從余下的15個數裡取一個數【變成C(15,1)】,最後從余下的14個數裡取一個數【變成C(14,1)】就完成了。因此這個過程很容易通過遞歸的方式實現。