组合数定义:
从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。

公式:

  1. C(n,m)=n!/((n-m)!*m!)(mn



题目描述:
组合数的计算虽说简单但也不乏有些陷阱,这主要是因为语言中的数据类型在表示范围上是有限的。更何况还有中间结果溢出的现象,所以千万要小心。


输入:
求组合数的数据都是成对(M与N)出现的,每对整数M和N满足0<m, n≤20,以EOF结束。


输出:
输出该组合数。每个组合数换行。


样例输入:
5 2
18 13


样例输出:
10
8568


分析:就是一个数学题,,很简单,,但是我一开始就想着优化,,想着化简 减少运算量,,然后就一直出问题,,打击到自己了,,,然后用了个long long 就直接通过了,,,于是就放弃化简。。,,

这样反而:直接呈现最原始 体现思路和公式的做法!!


  1. #include<iostream>
  2. using namespace std;
  3. int fun(int a,int b){ //这里的for循环还有很大的优化空间 0.0
  4. long long sum1=1,sum2=1,sum=1;
  5. for(int i=1;i<=a;i++){
  6. sum*=i;
  7. }
  8. for(int i=1;i<=b;i++){
  9. sum1*=i;
  10. }
  11. for(int i=1;i<=a-b;i++){
  12. sum2*=i;
  13. }
  14. return sum/sum1/sum2;
  15. }
  16. int main(){
  17. int a,b;
  18. while(cin>>a>>b){
  19. cout<<fun(a,b)<<endl;
  20. }
  21. return 0;
  22. }

ps:就到这吧,,看这个肯定是可以懂的,,我就这了,,优化交给聪明的你啦!!

不要吝啬你的点赞哦!
溜了溜了~~

点赞(1)
 

7 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论