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

C++-এ N বার ডাইস নিক্ষেপে সর্বোচ্চ ডটের আশা মান


দেওয়া কাজ হল M ফেস বিশিষ্ট একটি ডাইস N বার নিক্ষেপ করার পর সর্বোচ্চ ডটের আশা মান (expected value) ক্যালকুলেট করা।

ডাইসের প্রথম ফেসে ১ ডট, দ্বিতীয় ফেসে ২ ডট, এভাবে M-তম ফেসে M ডট থাকে। প্রতিটি ফেস আসার সম্ভাবনা ১/M।

উদাহরণ দিয়ে বোঝা যাক

ইনপুট - M=2, N=3

আউটপুট - ১.৮৭৫

ব্যাখ্যা - ডাইসের ২ পাশ = {1, 2}

ডাইস ৩ বার নিক্ষেপ করলে স্যাম্পল স্পেস = Mᴺ = ২³ = ৮

{(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2)
 (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)}
(1,1,1)-এ সর্বোচ্চ = ১
অন্য সব কেসে সর্বোচ্চ = ২
প্রতিটি কেসের সম্ভাবনা = ১/৮ = ০.১২৫
সর্বোচ্চ সংখ্যার আশা মান = (১+২+২+২+২+২+২+২) × ০.১২৫ = ১.৮৭৫

ইনপুট - M=2, N=2

আউটপুট - ১.৭৫

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • একটি সংখ্যা সর্বোচ্চ হওয়ার কেসের সংখ্যা এর আগের সংখ্যা দিয়ে বের করা যায় ফর্মুলা: iᴺ - (i-1)ᴺ।

    উদাহরণস্বরূপ, M=4, N=2 হলে, সর্বোচ্চ = ৪ হয় এমন কেসের সংখ্যা = ৪² - ৩² = ৭।

    ফাইনাল আউটপুট হবে ১ থেকে M পর্যন্ত প্রতিটি উপাদানের জন্য এই ফর্মুলা লাগিয়ে যোগফল -

    (i * (iᴺ - (i - 1)ᴺ)) / Mᴺ এবং সেগুলো যোগ করা।

  • MaxExpect() ফাংশনে max = 0.0 ডাবল ভেরিয়েবল আরম্ভ করুন যোগফল সংরক্ষণের জন্য।

  • তারপর i=M থেকে i>0 পর্যন্ত লুপ চালান।

  • লুপের ভেতরে উপরের ফর্মুলা প্রয়োগ করুন এবং ফলাফল max-এ যোগ করুন।

C++ প্রোগ্রাম উদাহরণ

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

double MaxExpect(double M, double N){
    double max = 0.0, i;
    for (i = M; i; i--)
        /*সর্বোচ্চ সংখ্যা বের করার ফর্মুলা এবং
        সর্বোচ্চ সংখ্যাগুলোর যোগফল*/
        max += (pow(i / M, N) - pow((i - 1) / M, N)) * i;
    return max;
}

int main(){
    double M = 2, N = 3;
    cout << MaxExpect(M, N);
    return 0;
}

আউটপুট

1.875
  1. C++ কোড: পাথর দিয়ে দিতে পারা বার সংখ্যা গণনা

  2. সি++ কোড: টার্গেট x পেতে ডাইস রোল সংখ্যা বের করুন

  3. দেওয়া অপারেশন q বার প্রয়োগ করার পর অ্যারেতে আলাদা সংখ্যাগুলোর সংখ্যা বের করা C++-এ

  4. C++ দিয়ে সর্বোচ্চ বেণ্ড (Bends) Barney পথের দৈর্ঘ্য বের করা