在 C++ 中给出击中目标的概率时,查找玩家获胜的概率
在这个问题中,我们给出了四个值p、q、r、s。我们的任务是在给定击中目标的概率时找出玩家获胜的概率。
在这里,我们有两个正在玩射箭游戏的玩家。玩家1击中目标的概率定义为p/q。玩家2击中目标的概率定义为r/s。我们需要找到玩家一赢得比赛的概率。
让我们举个例子来理解这个问题,
输入
p = 3, q = 5, r = 2, s = 5输出结果
0.789
解决方法
*这种方法需要概率知识。
因为,玩家有机会击中目标的次数没有上限。两者都可以击中目标任意次数,这使得获胜情况的计算独立于试验次数。
所以,
假设玩家一击中目标的概率为P1=p/q,这使得丢失1的概率为p/q。
假设玩家二击中目标的概率为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))...
这是一个无限的GP,其中,
A = P1 R = [(1 - P1)*(1 - P2)]
总和将是,
S = A/ (1- R) , as R is less than 1.
$$S=\left(\frac{\left(\frac{p}{p}\right)}{1-\left(1-\frac{p}{p}\right)*\left(1-\frac{p}{p}\right)}\right)$$
程序来说明我们的解决方案的工作,
示例
#includeusing 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<<"玩家1获胜的概率为 "< 输出结果 玩家1获胜的概率为 0.789474