Trong bài toán này, chúng ta phải tạo một hàm sẽ tạo ra ba số dựa trên xác suất đã cho.
Đối với điều này, chúng tôi sẽ sử dụng hàm tạo số ngẫu nhiên được tích hợp sẵn là rand (a, b) để tạo các số ngẫu nhiên trong phạm vi [a, b] với xác suất bằng nhau.
Nhiệm vụ của chúng ta là chỉ trả về ba số A, B, C có xác suất xuất hiện lần lượt là P (A), P (B), P (C) và theo định nghĩa của xác suất P (A) + P (B) + P (C) =1.
Để tạo hàm của chúng ta bằng cách sử dụng rand (a, b). chúng ta sẽ sử dụng đặc điểm của nó là xác suất xuất hiện của bất kỳ số nào từ a đến b là như nhau. Nhưng chúng ta phải lấy A với xác suất P (A), v.v. Vì vậy, đối với điều này, chúng tôi sẽ sử dụng xác suất phần trăm của các con số, tức là nếu P (A) =1/5, chúng tôi sẽ coi nó là 20%.
Vì vậy, phần trăm xác suất tối đa sẽ là 100%, vì vậy chúng tôi sẽ tạo một số ngẫu nhiên từ 0 đến 100 và dựa trên số được tạo, chúng tôi sẽ trả về các số giữa A, B, C dựa trên các điều kiện sau.
Trường hợp 1 - Nếu số được tạo nằm trong khoảng từ 0 đến P (A), trả về A.
Trường hợp 2 - Nếu số được tạo nằm giữa P (A) và P (A) + P (B), trả về B.
Trường hợp 3 - Nếu số được tạo nằm giữa P (A) + P (B) và 1 {P (A) + P (B) + P (C)}, trả về C.
Hãy xem một ví dụ sẽ làm cho khái niệm rõ ràng,
Đầu vào
A = 3 , P(A) = 35% B = 43, P(B) = 50% C = 90, P(C) = 15%
Chương trình sẽ trở lại,
3 nếu hàm rand tạo ra số từ 0 đến 35.
43 nếu hàm rand tạo ra số từ 35 đến 85.
90 nếu hàm rand tạo ra số từ 85 đến 100.
Chương trình cho thấy việc triển khai logic của chúng tôi,
Ví dụ
#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; }
Đầu ra
Random number between 3, 45, 90 with given probabilities is : 3