编写一个函数,该函数根据C ++中的给定概率生成3个数字之一

在此问题中,我们必须创建一个函数,该函数将根据给定的概率生成三个数字。

为此,我们将使用内置的随机数生成器函数rand(a,b),它以相等的概率生成[a,b]范围内的随机数。

我们的任务是仅返回三个数字A,B,C,它们分别根据概率P(A)+ P(B)的定义分别出现为P(A),P(B),P(C)。 + P(C)= 1。

使用rand(a,b)创建函数。我们将使用其特征,即从a到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