এই সমস্যায়, আমাদের একটি ফাংশন তৈরি করতে হবে যা দেয়া সম্ভাবনা অনুযায়ী তিনটি সংখ্যা জেনারেট করবে।
এজন্য, আমরা বিল্ট-ইন র্যান্ডম নম্বর জেনারেটর ফাংশন ব্যবহার করব যেটি rand(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-র মধ্যে সংখ্যা রিটার্ন করব।
ক্ষেত্র ১ - যদি জেনারেট হওয়া সংখ্যা 0 এবং P(A)-র মধ্যে থাকে, A রিটার্ন করুন।
ক্ষেত্র ২ - যদি জেনারেট হওয়া সংখ্যা P(A) এবং P(A)+P(B)-র মধ্যে থাকে, B রিটার্ন করুন।
ক্ষেত্র ৩ - যদি জেনারেট হওয়া সংখ্যা 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<<"দেওয়া সম্ভাবনায় 3, 45, 90-এর মধ্যে র্যান্ডম নম্বর: "<<randomABC(3, 43, 90, 35, 40, 25); return 0; }
আউটপুট
দেওয়া সম্ভাবনায় 3, 45, 90-এর মধ্যে র্যান্ডম নম্বর: 3