在C ++中找到N从点N移动之后到达所有点的概率
假设我们有一个数字N,它代表人在数字线上的初始位置。我们也有L,这是该人离开的可能性。我们必须找到从点N开始完成N次移动后到达数字线上所有点的概率。每次移动都可以向左或向右。
因此,如果输入像n=2,l=0.5,那么输出将是[0.25,0,0.5,0,0.25]
为了解决这个问题,我们将遵循以下步骤-
高:=1-低
定义大小为n+1x2*n+1的数组A并用0填充
A[1,n+1]=高,A[1,n-1]=低
对于初始化i:=2,当i<=n时,更新(将i增加1),执行-
A[i,j]:=A[i,j]+(A[i-1,j+1]*低)
A[i,j]:=A[i,j]+(A[i-1,j-1]*高)
对于初始化j:=1,当j−=2*n时,更新(将j增加1),-
对于初始化j:=2*n-1,当j>=0时,更新(将j减1),-
对于初始化i:=0,当i−2*n+1时,更新(i增加1),-
显示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