求在N个数中取M个数,有几种取法.
如1 3 5 9 7 C(5,3)=C(4,3)+C(4,2) //从5个数取3个=(从 4个取3个)+(从4个取2个+之前没取那个)
=C(3,3)+C(3,2)+C(3,1)+C(3,2)
=1+C(2,1)+C(2,2)+3+C(2,1)+C(2,2)
=1+2+1+3+2+1
=10
代码:
#include <bits/stdc++.h>
using namespace std;
int C(int m,int n){
if(m==n)return 1;
if(n==1)return m;
else return C(m-1,n)+C(m-1,n-1);
}
int main(){
int m ,n;
cin >> m >> n;
cout << C(m,n) << endl;
}
把各个取法输出:
如 1 3 5 9 7 从右边开始取。
. . 5 9 7----597
. 3 . 9 7----397
1 . . 9 7----197
. 3 5 . 7----359
1 . 5 . 7----157
1 3 . . 7----137
. 3 5 9 .----359
1 . 5 9 .----159
1 3 . 9 .----139
1 3 5 . .----135
代码:
#include <bits/stdc++.h>
using namespace std;
int a[30],f[30];
int n,m;
void print(){
for(int i=1;i<=m;i++)
cout << f[i];
cout << endl;
}
void fun(int n,int m){
if(m==0)print();
else
for(int i=n;i>=m;i--){
f[m]=a[i];
fun(i-1,m-1);
}
}
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++)
cin >> a[i];
fun(n,m);
return 0;
}