Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में 2 या 3 चरणों से एक बिंदु पर पहुंचने की प्रायिकता


एक व्यक्ति "A" शुरुआती स्थिति X = 0 से चल रहा है, कार्य ठीक X = num पर पहुंचने की प्रायिकता ढूंढना है, यदि वह 2 या 3 चरण ले सकता है। चरण लंबाई 2 के लिए प्रायिकता P है, चरण लंबाई 3 के लिए प्रायिकता 1 - P है।

इनपुट

num = 5, p = 0.2

आउटपुट

0.32

व्याख्या

num यानी 5 तक पहुंचने के 2 तरीके हो सकते हैं:
2+3 प्रायिकता 0.2 × 0.8 = 0.16 के साथ
3+2 प्रायिकता 0.8 × 0.2 = 0.16 के साथ
तो, कुल प्रायिकता 0.16 + 0.16 = 0.32 होगी

इनपुट

num = 2, p = 0.1

आउटपुट

0.1

समस्या को हल करने के लिए नीचे दिया गया दृष्टिकोण

हम समस्या को हल करने के लिए डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे।

समाधान में हम:

  • एक प्रायिकता ऐरे घोषित करें जिसका आकार num+1 हो और इसके मान निर्दिष्ट करें: probab[0] = 1, probab[1] = 0, probab[2] = p, probab[3] = 1 - p
  • i को 0 से num तक पुनरावृत्त करें, जबकि इसका मान बढ़ाते रहें
  • प्रत्येक i के लिए, probab[i] = p * probab[i - 2] + (1 - p) * probab[i - 3] सेट करें
  • probab[num] रिटर्न करें
  • परिणाम प्रिंट करें।

एल्गोरिदम

Start
Step 1→ 2 या 3 चरणों से एक बिंदु पर पहुंचने की प्रायिकता की गणना करने के लिए फंक्शन घोषित करें
    float probab(int num, float p)
        double probab[num + 1] घोषित करें
        probab[0] = 1 सेट करें
        probab[1] = 0 सेट करें
        probab[2] = p सेट करें
        probab[3] = 1 - p सेट करें
        Loop for int i = 4 to i <= num, ++i
            probab[i] = p * probab[i - 2] + (1 - p) * probab[i - 3] सेट करें
        return probab[num]

Step 2→ main() में
    int num = 2 घोषित करें
    float p = 0.1 घोषित करें
    probab(num, p) कॉल करें
Stop

उदाहरण

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

// 2 या 3 चरणों से एक बिंदु पर पहुंचने की प्रायिकता की गणना करने का फंक्शन
float probab(int num, float p) {
    vector<double> dp(num + 1, 0.0);
    dp[0] = 1;
    dp[1] = 0;
    if (num >= 2) dp[2] = p;
    if (num >= 3) dp[3] = 1 - p;
    
    for (int i = 4; i <= num; ++i) {
        dp[i] = p * dp[i - 2] + (1 - p) * dp[i - 3];
    }
    return dp[num];
}

int main() {
    int num = 5;
    float p = 0.2;
    cout << "Probability is: " << probab(num, p);
    return 0;
}

आउटपुट

Probability is: 0.32

  1. C++ में उदाहरण के साथ एक्सप्रेशन ट्री C++ में उदाहरण के साथ एक्सप्रेशन ट्री

    एक एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री है जिसमें ट्री का प्रत्येक नोड या तो एक ऑपरेटर या ऑपरेंड से बना होता है। लीफ नोड्स ट्री के एक ऑपरेंड को दर्शाते हैं। नॉन-लीफ नोड्स ट्री के एक ऑपरेटर को दर्शाते हैं। उदाहरण: इनफिक्स एक्सप्रेशन प्राप्त करने के लिए जिसे आसानी से हल किया जा सकता है, हम

  1. C++ में 3n स्लाइस वाली पिज्जा C++ में 3n स्लाइस वाली पिज्जा

    समस्या विवरण मान लीजिए 3n स्लाइस वाली एक पिज्जा है जिसके स्लाइस विभिन्न आकार के हैं। मैं और मेरे दो दोस्त पिज्जा के स्लाइस निम्नानुसार लेंगे: मैं कोई भी पिज्जा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरे चुने हुए स्लाइस के एंटी-क्लॉकवाइज दिशा में अगला स्लाइस लेगा। मेरा दोस्त बिमल मेरे चुने हुए स्लाइस के क

  1. C++ में शतरंज बोर्ड पर घोड़े की संभावना C++ में शतरंज बोर्ड पर घोड़े की संभावना

    मान लीजिए हमारे पास एक NxN शतरंज बोर्ड है, एक घोड़ा r-वें पंक्ति और c-वें स्तंभ से शुरू होता है और ठीक K चालें चलने का प्रयास करता है। यहां पंक्तियों और स्तंभों को 0 से अनुक्रमित किया जाता है, इसलिए शीर्ष-बायां वर्ग (0, 0) है, और निचला-दायां वर्ग (N-1, N-1) है। एक घोड़ा एक सेल से 8 अलग-अलग सेलों म