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개의 헤드를 포함하는 세트는 -

허허허허허허허허허허

따라서 확률은 4/8 또는 0.5가 됩니다.

예시

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

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

위의 문제를 해결하기 위해 따라야 할 접근 방식 -

  • n과 k를 입력으로 사용합니다.
  • factorial 값을 배열에 저장하고 필요할 때마다 호출합니다.
  • 계산을 수행합니다.
  • 결과를 반환합니다.

알고리즘

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