在C ++中找到N从点N移动之后到达所有点的概率
假设我们有一个数字N,它代表人在数字线上的初始位置。我们也有L,这是该人离开的可能性。我们必须找到从点N开始完成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,当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.360
0.48
0
0.16
以上是 在C ++中找到N从点N移动之后到达所有点的概率 的全部内容, 来源链接: utcz.com/z/354300.html