c++ - 计算 FUNPROB 的概率

标签 c++ math probability

关于 - FUNPROB

解决方案是:

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我想为每个 N=<M 证明我们有res = (M-N+1) / (M+1)对于 N=0很明显概率是1 .

对于 N=1把我们的每一个人5$在任意顺序的队列中,现在为一个人 10$你可以把他放在除队列前面以外的任何地方,这样你就可以在 M+1 之间你有可用的地方M+1-1选择。所以 N=1你有:res = (M-1+1) / (M+1)

假设每个 N=<k 的公式都是正确的我想证明如果N=k+1公式还是对的。对于那个放 M5$的人和 k在任意队列中有 10 美元的人。我们假设 res = (M-K+1) / (M+1)是在这个队列中工作并且每个人都可以得到他的票的概率。如果 10$,请考虑此队列中的一个工作队列人在后面5$ person 删除它们并递归执行此操作,直到没有 5$人。这会起作用,因为正如我上面所说,队列中的第一个人是 10$一,我也说过N<M放置 K+1 的概率队列中的人正在选择一个位置 M-k+1因为我们删除了 k 10$队列中的人。就像我们所说的 N=1所以我们有可能把 K+15$排队的人是:((M-k) - 1 +1) / ((M - k) +1) (*) 并且根据指示,我们有 N=k 的工作队列的概率是:(M-k +1) / (M +1) (* ) 从 () 和 ( * *) 我们有可能把 K+110$的人和 M5$的人在有问题的队列中条件是:

[((M-k) - 1 +1) / ((M - k) +1)] * [(M-k +1) / (M +1)] = ((M-k) - 1 +1) / (M +1) = (M-(k+1) +1) / (M +1)

证明到此结束:)。

关于c++ - 计算 FUNPROB 的概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281005/

相关文章:

c++ - do-while-loop 的问题

c++ - 从 C++ 程序在 Linux 中运行另一个程序

parsing - 从中缀转换为后缀然后在数学评估器上构建 AST 是否习惯?

python - 做列表数学 - python

opencv - 如何从卡尔曼滤波器估计部分状态的概率?

artificial-intelligence - 马尔可夫链聊天机器人如何工作?

python - 计算团队获胜的概率

c++ - 确保 vector 中的共享指针被正确推回

c++ - 在类中声明自定义比较器时类型/值不匹配

algorithm - 为什么对一个数求平方比将两个随机数相乘更快?