首页 > 代码库 > Choose and divide
Choose and divide
The binomial coefficient C(m,n) is defined as Given four natural numbers p, q, r, and s, compute the the result of dividing C(p,q) by C(r,s).
m!
C(m,n) = --------
n!(m-n)!
The Input
Input consists of a sequence of lines. Each line contains four non-negative integer numbers giving values forp, q, r, and s, respectively, separated by a single space. All the numbers will be smaller than 10,000 withp>=q and r>=s.The Output
For each line of input, print a single line containing a real number with 5 digits of precision in the fraction, giving the number as described above. You may assume the result is not greater than 100,000,000.Sample Input
10 5 14 9
93 45 84 59
145 95 143 92
995 487 996 488
2000 1000 1999 999
9998 4999 9996 4998
Output for Sample Input
0.12587
505606.46055
1.28223
0.48996
2.00000
3.99960
题意:题目所求为组合 C(p,q) / C(r,s);那么可以乘以一个在除以一个;即将
m! C(m,n) = -------
n!(m-n)!
化简成为 m * (m-1) * (m-2) . . . . . (m- n +1)/n!; 这个分子与分母的个数是一样的;
那么便有一下标程;
# include <iostream> # include <cstdio> using namespace std; int main() { //freopen("a.txt","r",stdin); int p,q,r,s; while(scanf("%d%d%d%d",&p,&q,&r,&s)!=EOF) { int i,n; double ans=1.0; //if (p - q < q) q = p - q; //if (r - s < s) s = r - s; for(i=1;i<=q||i<=s;i++) { if(i<=q) ans=ans*(p-q+i)/i; if(i<=s) ans=ans/(r-s+i)*i; } printf("%.5lf\n",ans); } return 0; }
Choose and divide
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。