কম্পিউটার টিউটোরিয়াল

N টি সিক্কা টস করে কমপক্ষে K টি হেড পাওয়ার সম্ভাবনা C++-তে


সম্ভাবনা হলো উপলব্ধ ডেটা সেট থেকে প্রত্যাশিত আউটপুট পাওয়ার সুযোগ। সম্ভাবনার পরিসীমা ০ এবং ১-এর মধ্যে থাকে, যেখানে ০ অসম্ভাব্যতা এবং ১ নিশ্চয়তা নির্দেশ করে।

সম্ভাবনা কী?

গণিতে সম্ভাবনা ঘটনার অনিশ্চিততা এবং কারণ বলে। অন্য কথায়, সম্ভাবনা একটি ঘটনা ঘটার সম্ভাবনা গণনা করে, যা ০ থেকে ১ পর্যন্ত সংখ্যায় প্রকাশ করা যায়। উদাহরণস্বরূপ: নিরপেক্ষ সিক্কা টস করলে হেড পাওয়ার সম্ভাবনা, বা ডাইস রোল করলে ৩ পাওয়ার সম্ভাবনা।

এখন, আমাদের কাজ হলো N টি সিক্কা টস করে কমপক্ষে K টি হেড পাওয়ার সম্ভাবনা বের করা।

মনে করি, ৩ টি সিক্কা এবং K = ২। তাহলে ২³ = ৮ টি উপায়ে সিক্কা টস করা যায়:

HHH, HTH, HHT, HTT, THH, THT, TTT, TTH।

এমন সেটগুলো যেগুলোতে কমপক্ষে ২ টি হেড আছে:

HHH, HTH, HHT, THH।

তাই সম্ভাবনা = ৪/৮ = ০.৫।

উদাহরণ

ইনপুট: k = 1, n = 3 আউটপুট: 0.875
ইনপুট: k = 3, n = 6 আউটপুট: 0.65625

সমাধানের পদ্ধতি -

  • n এবং k ইনপুট নেওয়া।
  • ফ্যাক্টোরিয়ালের মান একটি অ্যারেয় সংরক্ষণ করা এবং প্রয়োজনে কল করা।
  • গণনা করা।
  • ফলাফল রিটার্ন করা।

অ্যালগরিদম

ধাপ ১ -> কমপক্ষে k টি হেড পাওয়ার সম্ভাবনা গণনার ফাংশন ঘোষণা
    double probability(int k, int n)
    double check = 0 ঘোষণা এবং সেট
    লুপ i = k থেকে i <= n পর্যন্ত ++i
        check += temp[n] / (temp[i] * temp[n - i])
    শেষ
    check = check / (1LL << n)
    return check
ধাপ ২ -> পূর্বে গণনা করার ফাংশন ঘোষণা
    void precompute()
    temp[0] = temp[1] = 1 সেট
    লুপ i = 2 থেকে i < 20 পর্যন্ত ++i
        temp[i] = temp[i - 1] * i সেট
    শেষ
ধাপ ৩ -> main-এ
    precompute() কল
    probability(1, 3) কল
শেষ

উদাহরণ

#include<bits/stdc++.h>
using namespace std;
#define size 21
double temp[size];
// n টসে কমপক্ষে k টি হেড পাওয়ার সম্ভাবনা গণনা
double probability(int k, int n) {
    double check = 0;
    for (int i = k; i <= n; ++i)
        check += temp[n] / (temp[i] * temp[n - i]);
    check = check / (1LL << n);
    return check;
}
void precompute() {
    temp[0] = temp[1] = 1;
    for (int i = 2; i < 20; ++i)
        temp[i] = temp[i - 1] * i;
}
int main() {
    precompute();
    // ৩ টি সিক্কা থেকে ১ টি হেড পাওয়ার সম্ভাবনা
    cout << "probability is : " << probability(1, 3) << "\n";
    // ৬ টি সিক্কা থেকে ৩ টি হেড পাওয়ার সম্ভাবনা
    cout << "probability is : " << probability(3, 6) << "\n";
    return 0;
}

আউটপুট

probability is : 0.875
probability is : 0.65625

  1. সি++-এ অ্যারেতে একটি কী (Key) থাকার প্রোবাবিলিটি বের করার প্রোগ্রাম

  2. C++-এ চেসবোর্ডে ঘোড়ার সম্ভাবনা

  3. C++-এ ভেক্টর থেকে সাবভেক্টর বের করার পদ্ধতি

  4. Visual Studio-এ C++ শুরুর গাইড