在 C++ 中,已知击中目标的概率,求玩家获胜的概率
在这个问题中,我们给定四个值 p、q、r、s。我们的任务是在给定击中目标的概率的情况下,找到玩家获胜的概率。
这里,我们有两个玩家正在玩射箭游戏。玩家 1 击中目标的概率定义为 p/q。玩家 2 击中目标的概率定义为 r/s。我们需要找到玩家 1 赢得比赛的概率。
让我们举个例子来理解这个问题,
输入
p = 3, q = 5, r = 2, s = 5
输出
0.789
解决方案方法
*这种方法需要概率知识。
由于玩家击中目标的次数没有上限。两者都可以击中目标任意次数,这使得获胜情况的计算与试验次数无关。
所以,
假设玩家 1 击中目标的概率为 P1 = p/q,这使得未击中的概率为 1 - p/q。
假设玩家 2 击中目标的概率为 P2 = r/s,这使得未击中的概率为 1 - r/s。
现在,对于无限次试验,玩家 1 获胜的概率可以是,
000win(P1) + (lost(P1)*lost(P2)*win(P1)) + (lost(P1)*lost(P2)*lost(P1)*lost(P2)*win(P1) + ….
这可以表示为,
P1 + ((1 - P1)*(1 - P2)*(P1)) + ((1 - P1)*(1 - P2)*(1 - P1)*(1 - P2)*(P1)) …
这是一个无限等比数列,其中,
A = P1 R = [(1 - P1)*(1 - P2)]
总和将是,
S = A/ (1- R) , as R is less than 1.
$$S=\left(\frac{\left(\frac{p}{q}\right)}{1-\left(1-\frac{p}{q}\right)*\left(1-\frac{r}{s}\right)}\right)$$
程序说明我们解决方案的工作原理,
示例
#include <iostream> using namespace std; double calcWinningPropP1(double p, double q, double r, double s){ return (p / q) / (1 - ( (1 - (p/q)) * (1 - (r/s)) ) ); } int main() { double p = 3, q = 5, r = 2, s = 5; cout<<"The probability of player 1 winning is "<<calcWinningPropP1(p, q, r, s); return 0; }
输出
The probability of player 1 winning is 0.789474
广告