ในโจทย์นี้ เราต้องสร้างฟังก์ชันที่จะสุ่มเลข 3 ตัวตามความน่าจะเป็นที่กำหนด
สำหรับสิ่งนี้ เราจะใช้ฟังก์ชันสุ่มตัวเลขในตัว (built-in random number generator) ซึ่งคือ rand(a, b) ที่สุ่มตัวเลขในช่วง [a, b] ด้วยความน่าจะเป็นเท่ากัน
งานของเราคือคืนค่าเพียง 3 ตัวเลข A, B, C ซึ่งมีความน่าจะเป็นในการเกิดเป็น P(A), P(B), P(C) ตามลำดับ และตามนิยามของความน่าจะเป็น P(A) + P(B) + P(C) = 1
เพื่อสร้างฟังก์ชันของเราโดยใช้ rand(a,b) เราจะใช้คุณสมบัติที่ว่าความน่าจะเป็นของตัวเลขใดๆ จาก a ถึง b เท่ากัน แต่เราต้องได้ A ด้วยความน่าจะเป็น P(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) และ 100 (P(A)+P(B)+P(C)) ให้คืนค่า C
ตัวอย่างที่ช่วยให้เข้าใจง่ายขึ้น
อินพุต
A = 3, P(A) = 35% B = 43, P(B) = 50% C = 90, P(C) = 15%
โปรแกรมจะคืนค่า:
3 ถ้า rand สร้างตัวเลขระหว่าง 0 ถึง 35
43 ถ้า rand สร้างตัวเลขระหว่าง 35 ถึง 85
90 ถ้า rand สร้างตัวเลขระหว่าง 85 ถึง 100
โปรแกรมแสดงการนำตรรกะของเราไปใช้
#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