編寫一個 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP