Description:
输入非负整数n和m,求组合数 ,其中m≤n≤20
Input:
输入非负整数n和m,以空格分隔。
Output:
输出组合数。
Sample Input:
5 2
Sample Output:
10
Note:
本题由旧版NOJ导入,来源:刘汝佳《算法竞赛入门经典》
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <climits>
#include <stdio.h>
#include <iomanip>
#include <math.h>
#include <list>
#include <queue>
#include <tuple>
#include <stack>
#include <string.h>
using namespace std;
unsigned long long fb(int n)
{
if(n == 0 || n == 1)
return 1;
return n * fb(n-1);
}
int main(void)
{
int n, m;
cin >> n >> m;
if(n == m)
{
cout << "1" << endl;
return 0;
}
int chazhi = n - m;
unsigned long long fenzi = 1;
for(int i = 0; i < chazhi; i++)
{
fenzi = fenzi * (n-i);
}
unsigned long long fenmu = fb(chazhi);
unsigned long long res = fenzi / fenmu;
cout << res << endl;
return 0;
}