C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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増やします)、実行-

    • 初期化j:=1の場合、j − =2 * nの場合、更新(jを1増やします)、do −

      • A [i、j]:=A [i、j] +(A [i-1、j-1] *高)

    • 初期化j:=2 * n --1の場合、j> =0の場合、更新(jを1つ減らす)、実行-

      • A [i、j]:=A [i、j] +(A [i-1、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

  1. C ++を使用して、指定されたポイントから可能な四辺形の数を見つけます

    四辺形は、ユークリッド平面幾何学で4つの頂点と4つのエッジを持つポリゴンを形成します。名前4-gonなど。四辺形の他の名前に含まれ、正方形、表示スタイルなどとしても知られています。 この記事では、与えられた点から可能な四辺形の数を見つけるためのアプローチを説明します。この問題では、デカルト平面に提供された4つの点(x、y)を使用して作成できる四辺形の数を調べる必要があります。だからここに与えられた問題の例があります- Input : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) Output : 1 Explanation : One quadr

  2. C++で原点に最も近いK点を見つける

    一連のポイントがあるとします。私たちの仕事は、原点に最も近いK点を見つけることです。ポイントが(3、3)、(5、-1)、(-2、4)であるとします。次に、最も近い2つの(K =2)ポイントは(3、3)、(-2、4)です。 この問題を解決するために、ユークリッド距離に基づいてポイントのリストを並べ替えます。その後、並べ替えられたリストから最上位のK要素を取得します。これらはK最近傍点です。 例 #include<iostream> #include<algorithm> using namespace std; class Point{    pri