poj1942(求组合数)

Posted frankchen831x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1942(求组合数)相关的知识,希望对你有一定的参考价值。

题目链接:http://poj.org/problem?id=1942

题意:实际上这道题就是求C(n+m,n)。

思路:n、m的范围在unsigned中,所以不能递推计算组合数,可以采用公式C(a,b)=a!/(b!*(a-b)!),并且拆分阶乘依次进行除法运算。我在一个地方TLE了半小时,开始怎么也想不通怎么会T,后来发现我的getc函数的形参传递的是int,这样一旦实参是int所不能表示时,传递过来的可能是负数,那么在while循环里就会出现死循环,所以就T了。写代码真的要细心一些啊QAQ。还有一个细节是输入可能出现X 0 (X>0),应该输出1,而不是结束。

AC代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 unsigned n,m;
 6 
 7 unsigned getc(unsigned x,unsigned y){
 8     unsigned a=x+y,b=min(x,y);
 9     double ans=1.0;
10     while(b>0)
11         ans*=(double)(a--)/(double)(b--);
12     ans+=0.5;
13     return (unsigned)ans;
14 }
15 
16 int main(){
17     while(~scanf("%u%u",&n,&m),n||m)
18         printf("%u
",getc(n,m));
19     return 0;
20 }

 

以上是关于poj1942(求组合数)的主要内容,如果未能解决你的问题,请参考以下文章

poj1942 Paths on a Grid(无mod大组合数)

POJ1942-Paths On a Grid-组合数学

[ACM] POJ 1942 Paths on a Grid (组合)

Paths on a Grid POJ 1942 (组合数学 || 暴力)

POJ-2992 Divisors---组合数求因子数目

poj2992 divisors 求组合数的约数个数,阶乘的质因数分解