मान लीजिए हमारे पास एक संख्या N है जो संख्या रेखा पर व्यक्ति की प्रारंभिक स्थिति को दर्शाती है। हमारे पास L भी है जो व्यक्ति के बाएं जाने की संभावना है। हमें N चालें पूरी करने के बाद संख्या रेखा पर सभी बिंदुओं तक पहुंचने की संभावना खोजनी है। प्रत्येक चाल या तो बाएं या दाएं हो सकती है।
उदाहरण के लिए, यदि इनपुट n = 2, l = 0.5 है, तो आउटपुट [0.25, 0, 0.5, 0, 0.25] होगा।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- हाई := 1 - लो
- आकार n+1 x 2*n+1 का एक ऐरे A परिभाषित करें और 0 से भरें
- A[1][n + 1] = हाई, A[1][n - 1] = लो
- i := 2 से n तक लूप करें:
- j := 1 से 2*n तक लूप करें: A[i][j] := A[i][j] + (A[i - 1][j - 1] * हाई)
- j := 2*n - 1 से 0 तक घटते हुए लूप करें: A[i][j] := A[i][j] + (A[i - 1][j + 1] * लो)
- i := 0 से 2*n तक लूप करें: A[n][i] प्रदर्शित करें
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; void find_prob(int n, double low) { double high = 1 - low; double A[n + 1][2 * n + 1] = {{0}}; A[1][n + 1] = high; A[1][n - 1] = low; for (int i = 2; i <= n; i++) { for (int j = 1; j <= 2 * n; j++) A[i][j] += (A[i - 1][j - 1] * high); for (int j = 2 * n - 1; j >= 0; j--) A[i][j] += (A[i - 1][j + 1] * low); } for (int i = 0; i < 2*n+1; i++) cout << A[n][i] << endl; } int main() { int n = 2; double low = 0.6; find_prob(n, low); } इनपुट
2, 0.6
आउटपुट
0.36 0 0.48 0 0.16