C++ FUNPROB的概率计算

C++ FUNPROB的概率计算,c++,math,probability,C++,Math,Probability,关于— 解决办法是: int N, M; while(1) { scanf("%d %d", &N, &M); if (0 == N && 0 == M) break; if (N > M) printf("0.000000\n"); else { double res = (double) (M-N+1) / (M+1); printf("%.6f\n", res); } }

关于—

解决办法是:

int N, M;
while(1) {
    scanf("%d %d", &N, &M);
    if (0 == N && 0 == M) break;

    if (N > M) printf("0.000000\n");
    else {
        double res = (double) (M-N+1) / (M+1);
        printf("%.6f\n", res);
    }   
}   
我的问题是关于线路的

res = (M-N+1) / (M+1);

如何得出这样计算概率的结论?

首先,很明显,如果
N>M
概率为零

现在我想用
N
上的指示来证明。考虑<代码> M> 0 < /COD>我想证明每一个代码> n=< p>找到答案。 问题关键词是戴克单词和加泰罗尼亚数字@阿里的回答证明了答案是正确的,但没有解释我们是如何得出这个数字的

  • 认识到如果M
  • 如果M>=N,这是发生变化的必要条件,但不是充分条件。您需要排队的人的顺序正确。例如,M=3,N=2 MMMNN是正确的,而NNMMM是不正确的。因此,我们必须过滤掉不正确的可能队列

  • 这个问题可以用在一个时间步长内上升/下降的路径来考虑。X轴是时间轴,+Y轴是M轴,-Y轴是N轴。 如果我们从(0,0)开始,每M向上遍历1个单位,每N向上遍历-1个单位,那么我们总是结束于(M+N,M-N)

    我们的答案是:(从(0,0)到(M+N,M-N)的路径总数)-至少一次低于X轴的路径/路径总数

    求解上述问题得到的答案为(M-N+1)/(M+1)

    *分子中的第二项使用反射原理。如果你想了解更多细节,请添加评论,我将更新答案


    最后一部分

    你的答案没有解释如何进入最后一学期,请参阅我的答案,了解我一直在寻找的答案!谢谢@事实上,它确实可以解释。我试着用大约20行来解释它,如果你不懂什么,你可以简单地问你不懂的部分,而不是几个月后说它不是你想要的!