在 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP