एक व्यक्ति "A" प्रारंभिक स्थिति X =0 से चल रहा है, कार्य ठीक X =num तक पहुँचने की प्रायिकता ज्ञात करना है, यदि वह या तो 2 या 3 ले सकता है कदम। चरण लंबाई 2 यानी P के लिए प्रायिकता चरण लंबाई 3 की प्रायिकता 1 - P है।
इनपुट
num = 5, p = 0.2
आउटपुट
0.32
स्पष्टीकरण
There can be 2 ways to reach num, i.e, 5 2+3 with probability 0.2 * 0.8 = 0.16 3+2 with probability 0.8 * 0.2 = 0.16 So, total probability will be 0.16 + 0.16 = 0.32
इनपुट
num = 2, p = 0.1
आउटपुट
0.1
समस्या को हल करने के लिए नीचे उपयोग किया गया दृष्टिकोण इस प्रकार है
हम समस्या को हल करने के लिए गतिशील प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे।
समाधान में हम करेंगे -
-
एक संभाव्यता सरणी घोषित करें जिसका आकार num+1 है और इसके मानों को असाइन करें, सेट प्रोब [0] =1, सेट प्रोब [1] =0, सेट प्रोब [2] =पी, सेट प्रोब [3] =1 – पी पी>
-
I को 0 से num तक पुनरावृत्त करें, जबकि इसके मान में वृद्धि करें
-
प्रत्येक i के लिए, probab[i] =(p)*probab[i - 2] + (1 - p) * probab[i - 3]
सेट करें -
प्रोबब लौटाएं[संख्या]
-
प्रिंट परिणाम।
एल्गोरिदम
Start Step 1→ declare function to calculate probability of reaching a point with 2 or 3 steps at a time float probab(int num, float p) Declare double probab[num + 1] `Set probab[0] = 1 Set probab[1] = 0 Set probab[2] = p Set probab[3] = 1 – p Loop For int i = 4 and i <= num and ++i Set probab[i] = (p)*probab[i - 2] + (1 - p) * probab[i - 3] End return probab[num] Step 2→ In main() Declare int num = 2 Declare float p = 0.1 Call probab(num, p) Stop
उदाहरण
#include <bits/stdc++.h> using namespace std; //function to calculate probability of reaching a point with 2 or 3 steps at a time float probab(int num, float p){ double probab[num + 1]; probab[0] = 1; probab[1] = 0; probab[2] = p; probab[3] = 1 - p; for (int i = 4; i <= num; ++i) probab[i] = (p)*probab[i - 2] + (1 - p) * probab[i - 3]; return probab[num]; } int main(){ int num = 2; float p = 0.1; cout<<"probability is : "<<probab(num, p); return 0; }
आउटपुट
यदि उपरोक्त कोड चलाया जाता है तो यह निम्न आउटपुट उत्पन्न करेगा -
probability is : 0.1