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


在这个问题中,我们需要创建一个函数,根据给定的概率生成三个数字。

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

我们的任务是只返回三个数字 A、B、C,它们分别具有出现的概率 P(A)、P(B)、P(C),并且根据概率的定义 P(A) + P(B) + 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;
}

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

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

更新于: 2020-07-15

288 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告