Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เขียนฟังก์ชันสุ่มเลข 1 ใน 3 ตัวตามความน่าจะเป็นที่กำหนดใน C++


ในโจทย์นี้ เราต้องสร้างฟังก์ชันที่จะสุ่มเลข 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