#include<iostream>
#include<algorithm>
#include<vector>
#include<bits/stdc++.h>//万能头文件
using namespace std;
int main() {
long long jiecheng[21] = { 1};//0的阶乘已知是1,n<=20,故21足够
for (int i = 1; i < 21; i++) {
jiecheng[i] = i * jiecheng[i - 1];//每一个数i的阶乘都是上一个数(i-1)的阶乘乘以i;
}
vector<long long> ans;//把组合数答案放进来
int a, b;
while (scanf("%d%d", &a, &b) != EOF) {
ans.push_back(jiecheng[a] / (jiecheng[b] * jiecheng[a - b]));
}
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << endl;
}
return 0;
}
因为很可能要使用多次求组合数的功能,所以干脆把小于等于n的阶乘数保存下来,以空间换取时间的效率。
这道题对于我来说,主要难度在于输入部分比较繁琐,很久没关注过C语言的输入知识了,花了好久才实现题目要求,以EOF为输入结束标志。(即Ctrl+z)。