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

C++のコインのN個のトスで少なくともK個のヘッドを取得する確率


確率は、利用可能なデータのセットから目的の出力を取得する可能性です。確率の範囲は0から1の間にあり、整数0は不可能の可能性を示し、1は確実性を示します。

確率とは何ですか?

数学の確率は、イベントと理由の不確実性を伝えるツールを提供します。言い換えれば、確率は、特定のイベントの発生の可能性を計算することであると言えます。これは、1から0までの数値として表すことができます。たとえば、偏りのないコインが投げられたときに頭を取得する確率、または3を取得する確率サイコロを振ったとき。

ここで、質問に戻ると、N回のコインで少なくともk個のヘッドを獲得する確率を見つける必要があります。

コインが3つあり、kが2であるように、コインを投げる方法は23=8つあります-

HHH、HTH、HHT、HTT、THH、THT、TTT、TTH。

そして、少なくとも2つのヘッドを含むセットは-

HHH、HTH、HHT、THH。

したがって、確率は4/8または0.5になります。

Input: k = 1, n = 3
Output: 0.875

Input: k = 3, n = 6
Output: 0.65625

上記の問題を解決するために私たちが従うアプローチ-

  • nとkを入力として使用します。
  • 階乗の値を配列に格納し、必要なときにいつでも呼び出します。
  • 計算を実行します。
  • 結果を返します。

アルゴリズム

Step 1-> declare function to calculate the probability of getting at least k heads in n tosses
   double probability(int k, int n)
   Declare and set double check = 0
   Loop For i = k and i <= n and ++i
      Set check += temp[n] / (temp[i] * temp[n - i])
   End
   Call check = check / (1LL << n)
   return check
Step 2-> declare function to precompute the value
   void precompute()
   Set temp[0] = temp[1] = 1
   Loop For i = 2 and i < 20 and ++i
      Set temp[i] = temp[i - 1] * i
Step 3-> In main
   Call precompute()
   Call probability(1, 3)
Stop

#include<bits/stdc++.h>
using namespace std;
#define size 21
double temp[size];
// calculate probability of getting at least k heads in n tosses.
double probability(int k, int n) {
   double check = 0;
   for (int i = k; i <= n; ++i)
   check += temp[n] / (temp[i] * temp[n - i]);
   check = check / (1LL << n);
   return check;
}
void precompute() {
   temp[0] = temp[1] = 1;
   for (int i = 2; i < 20; ++i)
   temp[i] = temp[i - 1] * i;
}
int main() {
   precompute();
   // Probability of getting 1 head out of 3 coins
   cout<<"probability is : "<<probability(1, 3) << "\n";
   // Probability of getting 3 head out of 6 coins
   cout<<"probability is : "<<probability(3, 6) <<"\n";
   return 0;
}

出力

probability is : 0.875
probability is : 0.65625

  1. C++の配列に存在するキーKの確率

    サイズ「n」の配列で与えられ、タスクは、配列で利用可能な場合、与えられた要素kの確率を見つけることです。 配列内の要素の数に等しい「n」まで配列全体をトラバースし、指定された要素またはキー「k」を検索します。要素がその確率を計算するよりも配列に存在する場合は、0を出力します。 入力 arr[] = { 1, 2, 3, 4, 5, 6} K = 5 出力 probability of a key 5 in an array is :0.166 入力 arr[] = { 1,2,3,4,5,6,7 } K = 8 出力 probability of a key 5 in an

  2. C++のチェス盤でのナイト確率

    NxNチェス盤が1つあるとすると、騎士はr番目の行とc番目の列から開始し、正確にK回移動しようとします。ここでは、行と列に0のインデックスが付けられているため、左上の正方形は(0、0)であり、右下の正方形は(N-1、N-1)です。 騎士はセルから8つの異なるセルに移動できます。これは、この図に示されています- 騎士が移動するたびに、8つの可能な移動の1つをランダムに選択します。騎士は、正確にK移動するか、チェス盤から離れるまで移動を続けます。騎士が動きを止めた後もボードに留まる確率を見つける必要があります。 したがって、入力が3、2、0、0のような場合、出力は0.0625になります