在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.36

    0

    0.48

    0

    0.16

    以上是 在C ++中找到N从点N移动之后到达所有点的概率 的全部内容, 来源链接: utcz.com/z/354300.html

    回到顶部