求组合数 ( 以EOF为结束输入标志 )

主要是输入部分的问题

#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)。

发布了33 篇原创文章 · 获赞 0 · 访问量 535

猜你喜欢

转载自blog.csdn.net/enjoy_code_/article/details/104352836