组合数
组合数的公式就是高中里学的组合公式如下:这个公式编辑器也不让我复制,只能图片,拿图片先凑合下再说。
这两公式看不懂带个数进去就懂了。
问题:
对于给出a,b,求出它的组合数是多少。
方法一
利用第一个公式,代码写就是一个递归的过程,前半部分在打表,后半部分可直接输出
#include<iostream>
using namespace std;
const int mod = 1e9;
long long c[1005][1005];
int main()
{
for(int i = 0; i < 1000; i++){
for(int j = 0; j <= i; j++){ //0~i,因为j在i上方,不会大于i
if(!j) c[i][j] = 1;
else c[i][j] = (c[i-1][j-1]+c[i-1][j])%mod;
}
}
int a,b; //a总数
cin>>a>>b;
printf("%ld",c[a][b]);
return 0;
}
方法二
第二个公式,适用于输出较少的个数,方法就是一个个算。
#include<iostream>
using namespace std;
int zuhe(int a, int b)
{
int re = 1;
for(int i = a; i>a-b; i--) re*=i;
for(int i = 1; i<=b; i++) re/=i;
return re;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<zuhe(a,b);
return 0;
}