दिया गया कार्य M फलक वाले पासे को N बार फेंकने के बाद अधिकतम अपेक्षित डॉट्स की संख्या की गणना करना है।
पासे का पहला फलक 1 डॉट रखता है, दूसरा फलक 2 डॉट रखता है और इसी तरह। इसी तरह M-वां फलक M संख्या में डॉट रखता है।
प्रत्येक फलक के प्रकट होने की संभावना 1/M हो जाती है।
उदाहरण से समझते हैं
इनपुट - M=2, N=3
आउटपुट - 1.875
व्याख्या - पासे के 2 पक्ष = {1, 2}
यदि पासा 3 बार फेंका जाता है तो नमूना स्थान = M^N = 2^3
{(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) में अधिकतम संख्या = 1
(1, 1, 2) में अधिकतम संख्या = 2
(1, 2, 1) में अधिकतम संख्या = 2
(1, 2, 2) में अधिकतम संख्या = 2
(2, 1, 1) में अधिकतम संख्या = 2
(2, 1, 2) में अधिकतम संख्या = 2
(2, 2, 1) में अधिकतम संख्या = 2
(2, 2, 2) में अधिकतम संख्या = 2
प्रत्येक केस की संभावना = 1/2^3 = 0.125
इसलिए, अधिकतम संख्या की अपेक्षा = (1+2+2+2+2+2+2+2) * (0.125) = 1.875इनपुट - M=2, N=2
आउटपुट - 1.75
प्रयुक्त दृष्टिकोण
वह अधिकतम केस जिसमें एक संख्या आ सकती है, उसकी पिछली संख्या का उपयोग करके सूत्र द्वारा पाया जा सकता है: i^N - (i-1)^N।
उदाहरण के लिए यदि M=4 और N=2, तो कुल केस जिनमें अधिकतम = 4 होगा, 4^2 - (4-1)^2 = 7 होंगे।
इसलिए अंतिम उत्तर 1 से M तक हर तत्व पर इस सूत्र को लागू करके और उन्हें जोड़कर होगा:
(i * (i^N - (i - 1)^N)) / M^N
MaxExpect() फंक्शन में max = 0 टाइप का एक वेरिएबल आरंभ करें double टाइप का योग स्टोर करने के लिए।
फिर 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