编写一个函数,该函数根据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