poj 1942

来源:互联网 发布:java 堆栈实现 编辑:程序博客网 时间:2024/06/09 20:01

题意:就是从一个角到另一个角有多少种走法

刚看到这道题有点懵啊  无从下手,后来才知道用排列组合做

这道题如果细看的话,我们知道我们需要m+n步    那我们就选n步走下也就是Cm+n/n   也就是这道题的答案了

下面看代码:有两个地方需要注意我已经在程序中说明了

#include<stdio.h>#include<math.h>#include<iostream>#include<string.h>using namespace std;unsigned min(unsigned a,unsigned b){    return a > b?b:a;}unsigned com(unsigned n,unsigned m){    unsigned a = m + n;    unsigned b = min(m,n);    double x = 1.0;    while(b > 0)    {        x *= (double)(a--) / (double)(b--);  //这个地方一定要转换成double型的 不然除了之后就不行了              //这个地方用的很技巧,模拟笔算的形式  算的C    }    x += 0.5;       //这个地方一定要加上0.5  double转unsigned会强制截断小数,必须先四舍五入    return (unsigned)x;}int main(){    unsigned m,n;    while(~scanf("%d%d",&m,&n))    {        if(m == 0&&n == 0)            break;        else        {            cout<<com(n,m)<<endl;        }    }    return 0;}


0 0
原创粉丝点击