Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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)) …

이것은 무한 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