이 문제에서는 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)) …
이것은 무한 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)$$
우리 솔루션의 작동을 설명하는 프로그램
예
#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