Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 각 선수의 페널티 성공 확률이 주어졌을 때 A가 경기에서 승리할 확률 구하기

두 명의 선수 A와 B가 경기에서 승리하기 위해 페널티 킥에 도전하는 상황을 가정해 보겠습니다. 네 개의 정수 변수 a, b, c, d가 주어지며, A가 먼저 페널티를 성공시킬 확률은 a/b, B가 먼저 페널티를 성공시킬 확률은 c/d로 주어집니다.


페널티를 먼저 성공시키는 선수가 경기에서 승리하게 되며, 문제의 요구 사항에 따라 프로그램은 A가 경기에서 승리할 확률을 계산해야 합니다.


입력 예시

a = 10, b = 20, c = 30, d = 40

출력 예시

probability is 0.5333

입력 예시

a = 1, b = 2, c = 10, d = 11

출력 예시

probability is 0.523

프로그램의 접근 방식

  • 네 개의 정수 변수 a, b, c, d의 값을 입력받습니다.

  • A의 승리 확률 e = a/b와 B의 승리 확률 f = c/d를 계산한 뒤, 아래 공식을 적용하여 A가 최종적으로 승리할 확률을 구합니다.
    e × (1 / (1 − (1 − f) × (1 − f)))
    여기서 e는 A가 승리할 확률, f는 B가 승리할 확률을 의미하며, 이 공식은 경기가 여러 차례에 걸쳐 진행되는 상황까지 고려하여 A의 승리 확률을 보정해 줍니다.

  • 계산된 A의 승리 확률을 화면에 출력합니다.


알고리즘

시작
1단계 → 승리 확률을 계산하는 함수 선언
    double probab_win(int a, int b, int c, int d)
        double e = (double)a / (double)b 선언
        double f = (double)c / (double)d 선언
        return (e * (1 / (1 - (1 - f) * (1 - f))))
2단계 → main() 함수에서
        int a = 10, b = 20, c = 30, d = 40 변수 선언
        probab_win(a, b, c, d) 호출
종료

예제 코드

#include <bits/stdc++.h>
using namespace std;
// 경기에서 승리할 확률을 계산하는 함수
double probab_win(int a, int b, int c, int d){
    double e = (double)a / (double)b;
    double f = (double)c / (double)d;
    return (e * (1 / (1 - (1 - f) * (1 - f))));
}
int main(){
    int a = 10, b = 20, c = 30, d = 40;
    cout<<"probability is "<<probab_win(a, b, c, d);
    return 0;
}

출력

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

probability is 0.5333

이 알고리즘은 단순한 산술 연산만 수행하므로 시간 복잡도는 O(1)이며, 별도의 추가 메모리 없이 상수 공간 안에서 동작합니다.