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

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


ในปัญหานี้ เราต้องสร้างฟังก์ชันที่จะสร้างตัวเลขสามตัวตามความน่าจะเป็นที่ให้มา

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