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

C++에서 주어진 확률에 따라 3개의 숫자 중 하나를 생성하는 함수 작성

<시간/>

이 문제에서는 주어진 확률에 따라 세 개의 숫자를 생성하는 함수를 만들어야 합니다.

이를 위해 우리는 [a, b] 범위 내에서 동일한 확률로 난수를 생성하는 rand(a, b)인 내장 난수 생성기 함수를 사용할 것입니다.

우리의 임무는 각각 확률 P(A) + P(B)의 정의에 따라 P(A), P(B), P(C)로 발생할 확률이 있는 세 개의 숫자 A, B, C만 반환하는 것입니다. + P(C) =1.

rand(a,b)를 사용하여 함수를 생성합니다. 우리는 b에서 b까지의 임의의 숫자가 발생할 확률이 동일하다는 특징을 사용할 것입니다. 그러나 우리는 확률 P(A) 등으로 A를 얻어야 합니다. 따라서 이를 위해 숫자의 백분율 확률을 사용합니다. 즉, P(A) =1/5이면 20%로 처리합니다.

따라서 최대 확률 백분율은 100%이므로 0에서 100까지의 임의의 숫자를 생성하고 생성된 숫자를 기반으로 다음 조건에 따라 A, B, C 사이의 숫자를 반환합니다.

사례 1 − 생성된 숫자가 0과 P(A) 사이이면 A를 반환합니다.

사례 2 − 생성된 숫자가 P(A)와 P(A)+P(B) 사이에 있으면 B를 반환합니다.

사례 3 − 생성된 숫자가 P(A)+P(B)와 1{P(A)+P(B)+P(C)} 사이이면 C를 반환합니다.

개념을 명확하게 하는 예를 살펴보겠습니다.

입력

A = 3 , P(A) = 35%
B = 43, P(B) = 50%
C = 90, P(C) = 15%

프로그램이 반환됩니다.

rand 함수가 0에서 35 사이의 숫자를 생성하는 경우 3입니다.

rand 함수가 35에서 85 사이의 숫자를 생성하는 경우 43입니다.

rand 함수가 85에서 100 사이의 숫자를 생성하는 경우 90입니다.

우리 논리의 구현을 보여주는 프로그램

예시

#include<iostream>
using namespace std;
int randomABC(int A, int B, int C, int PA, int PB, int PC){
   int randNumber = rand()%100+1;
   if (randNumber <= PA)
   return A;
   if (randNumber <= (PA+PB))
   return B;
   else
   return C;
}
int main(){
   cout<<"Random number between 3, 45, 90 with given probabilities is : "<<randomABC(3, 43, 90, 35, 40, 25);
   return 0;
}

출력

Random number between 3, 45, 90 with given probabilities is : 3