原题链接:求组合数
组合数定义:
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。
公式:
C(n,m)=n!/((n-m)!*m!)(m≤n)
题目描述:
组合数的计算虽说简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。
输入:
求组合数的数据都是成对(M与N)出现的,每对整数M和N满足0<m, n≤20,以EOF结束。
输出:
输出该组合数。每个组合数换行。
样例输入:
5 2
18 13
样例输出:
10
8568
分析:就是一个数学题,,很简单,,但是我一开始就想着优化,,想着化简 减少运算量,,然后就一直出问题,,打击到自己了,,,然后用了个long long 就直接通过了,,,于是就放弃化简。。,,
这样反而:直接呈现最原始 体现思路和公式的做法!!
#include<iostream>
using namespace std;
int fun(int a,int b){ //这里的for循环还有很大的优化空间 0.0
long long sum1=1,sum2=1,sum=1;
for(int i=1;i<=a;i++){
sum*=i;
}
for(int i=1;i<=b;i++){
sum1*=i;
}
for(int i=1;i<=a-b;i++){
sum2*=i;
}
return sum/sum1/sum2;
}
int main(){
int a,b;
while(cin>>a>>b){
cout<<fun(a,b)<<endl;
}
return 0;
}
ps:就到这吧,,看这个肯定是可以懂的,,我就这了,,优化交给聪明的你啦!!
不要吝啬你的点赞哦!
溜了溜了~~
7 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复