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

C++-এ টস স্ট্রেইঞ্জ কয়েন্স (সিক্কা উল্টানো)


প্রতিটি সিক্কার হেড আসার প্রোবাবিলিটি prob[i] দেওয়া। সব সিক্কা একবার করে উল্টালে ঠিক target সংখ্যক হেড আসার প্রোবাবিলিটি বের করতে হবে।

উদাহরণ: prob = [0.5,0.5,0.5,0.5,0.5], target = 0 → আউটপুট 0.03125।

সমাধানের ধাপসমূহ

  • DP টেবিল dp[i][j] = প্রথম i টি সিক্কা থেকে j টি হেড পাওয়ার প্রোবাবিলিটি।
  • dp[0][0] = 1 - prob[0], dp[0][1] = prob[0]।
  • ট্রানজিশন: dp[i][j] = (1-prob[i])*dp[i-1][j] + prob[i]*dp[i-1][j-1]।
  • উত্তর: dp[n-1][target]।

C++ উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    double probabilityOfHeads(vector<double>& prob, int target) {
        int n = prob.size();
        vector<vector<double>> dp(n, vector<double>(target + 1, 0));
        dp[0][0] = 1 - prob[0];
        if (target > 0) dp[0][1] = prob[0];
        for (int i = 1; i < n; i++) {
            dp[i][0] = (1 - prob[i]) * dp[i-1][0];
            for (int j = 1; j <= min(i+1, target); j++) {
                dp[i][j] = (1 - prob[i]) * dp[i-1][j] + prob[i] * dp[i-1][j-1];
            }
        }
        return dp[n-1][target];
    }
};

int main() {
    vector<double> v = {0.5,0.5,0.5,0.5,0.5};
    Solution ob;
    cout << fixed << setprecision(5) << ob.probabilityOfHeads(v, 0);
}

ইনপুট

[0.5,0.5,0.5,0.5,0.5] 0

আউটপুট

0.03125
  1. C++-এ reference_wrapper

  2. C++-এ এনক্যাপসুলেশন

  3. C++-এ আইডেন্টিফায়ার (Identifiers)

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী?