ในปัญหานี้ เราต้องสร้างฟังก์ชันที่จะสร้างตัวเลขสามตัวตามความน่าจะเป็นที่ให้มา
สำหรับสิ่งนี้ เราจะใช้ฟังก์ชันสร้างตัวเลขสุ่มในตัวซึ่งเป็นแรนด์ (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 จะเท่ากัน แต่เราต้องได้ 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) และ 1{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