編寫一個 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;
}

輸出

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

更新於: 2020-07-15

288 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.