欧拉计划:第53题 Combinatoric selections

无意中知道有这个用编程解决数学题的网站,个人对数学又比较感兴趣,所以打算做个欧拉计划系列,将自己的一些见解分享给大家,第一次写文章,如果有不足的地方,希望多多包涵哈!
好了,进入正题。这道题的主要意思是求总数n在0~100中,有多少种组合的结果超过1000000。如果按照 n!/(r!(n-r)!)计算的话,结果会溢出计算机的计算范围,所以我先把这个公式化简了,变成 n(n-1)…(n-r+1)/r!。代码如下:

#include <stdio.h>
#include <stdlib.h>//求n的阶乘
long n_jiecheng(int n)
{   int i=0;long result=1;do{result= n*result;}while(--n);return result;
}
//求在n中选r个的排列数,就是求 n(n-1)...(n-r+1)/r!
long n_up(int n,int r)
{int n_cp=n;long r_factorial=n_jiecheng(r);long result=1;int i=1;for(i=0;i<r;++i){result=result*n_cp;n_cp=n_cp-1;;}//printf("n=%d,r=%d,result=%ld,r_factorial=%ld\n",n,r,result,r_factorial);result=result/r_factorial;if(result>1000000)printf("n=%d,r=%d\n",n,r);return result;
}int main()
{int i=100;int r=1;long result=0;long total=0;for(i=100;i>0;--i){for(r=1;r<100;++r){if(i>=r){result=n_up(i,r);if(result>1000000)//恰好大于1000000的i,r位置{total=total+i-2*r+1;//i就是C的下标,r就是C的上标,i-2r+1求的就是图中红框内的排列组合数。break;}}}}printf("result=%ld\n",result);printf("total=%ld\n",total);return 0;
}
 挑重点,由于排列组合的计算有个特点,就是计算结果呈正太分布,如图:


所以,只需要算出恰好大于1000000的位置,就可以知道n=100时,有多少个值是大于1000000的,

for(i=100;i>0;--i)//i从100到0,i是C的下标{for(r=1;r<100;++r)//r是C的上标{if(i>=r){result=n_up(i,r);if(result>1000000)//恰好大于1000000的i,r位置{total=total+i-2*r+1;//i就是C的下标,r就是C的上标,i-2r+1求的就是图中红框内的排列组合数。break;}}}}

欧拉计划:第53题 Combinatoric selections相关推荐

  1. 【欧拉计划第 5 题】最小公倍数 Smallest multiple

    Problem 5 Smallest multiple 2520 is the smallest number that can be divided by each of the numbers f ...

  2. 【欧拉计划第 13 题】 大数之和 Large sum

    Problem 13 Large sum Work out the first ten digits of the sum of the following one-hundred 505050-di ...

  3. 欧拉计划 第5题 Smallest multiple

    问题 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any r ...

  4. 详解欧拉计划第395题:毕达哥拉斯树

    本题难度系数为40%(最易5%,最难100%). 毕达哥拉斯树是按如下步骤生成的分形图形: 从一个单位正方形开始,以其中一条边为基底(在图示中,单位正方形下放的边作为基底),给基底所对的边粘连上一个三 ...

  5. 欧拉计划(project euler)最详细中文题解

    欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章).相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在 ...

  6. 欧拉计划 Project Euler 50-56

    Project Euler 50-56 Project Euler: https://projecteuler.net/ Project Euler | 欧拉计划: https://pe-cn.git ...

  7. 欧拉计划 P429 (数论)

    欧拉计划 P429 Sum of squares of unitary divisors(数论) 传送门:https://projecteuler.net/problem=429 题目大意: 定义一个 ...

  8. 欧拉计划(鱼C论坛)@20161107

    1.10以下的自然数中,属于3或5的倍数的数字有3,5,6,9,它们之和为23找出1000以下的自然数中,属于3或5倍数的所有数字之和. """ 欧拉计划 10以下的自然 ...

  9. Project Euler Problem 53: Combinatoric selections【组合数】

    PE其他解题报告请参考这里,本题答案在留言首条 Combinatoric selections Problem 53 There are exactly ten ways of selecting t ...

最新文章

  1. LeetCode算法题-Nth Digit(Java实现)
  2. 【竞赛总结】新冠期间饿了么骑士行为预估
  3. 1273: 夫妻 -stack的运用
  4. 一句命令删除docker所有镜像或容器
  5. AJAX跨域请求的理解,JAVA
  6. 以太坊源码(03):POA委员会选举机制
  7. url-pattern配置技巧
  8. nacos实现配置中心,对比config
  9. OpenCR介绍以及自制OpenCR
  10. 成就:优秀的管理者成就自己,卓越的管理者成就他人(读后感)
  11. 精灵骑士二觉_精灵骑士二觉版本小百科,先睹为快
  12. 你是天蝎座(10.24-11.22)的吗?
  13. PG学习笔记(1)—— 主从复制:流复制
  14. VUE项目--Floor组件
  15. 产品经理入职新公司要做什么?
  16. html从入门到精通胡菘,高职电商网页设计教学实践.docx
  17. 根据身份证号码生成生日和性别
  18. 解决百度地图多个标注覆盖不能响应点击的问题
  19. 微信群拉人很累?学会这 6 种自动化方案后,轻松乐无忧!
  20. python画椭圆turtle_python之turtle画蚊香,python用turtle画圆弧,原理:利用turtl

热门文章

  1. Stm32型号查阅手册
  2. 枚举的定义和使用,位域相关知识
  3. QAT量化感知训练(一)【详解】
  4. python三级考什么_什么是计算机三级考试?计算机三级考什么?
  5. 解析:百度算法之细雨算法2.0
  6. 相关系数和相关性分析(下):肯德尔相关系数
  7. 软件设计师考试(2018下半年)
  8. 谷歌浏览器自定义快捷搜索引擎
  9. 手把手代码实现五级流水线CPU——第三篇:流水线控制逻辑
  10. 智能安全帽值得买的十大品牌,如何挑选才能不翻车?