编写一个 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