概率是从可用数据集中获得所需输出的机会。概率范围在0和1之间,其中整数0表示不可能的可能性,而整数1表示确定性。
什么是概率?
数学的概率为我们提供了表明事件和原因的不确定性的工具。换句话说,可以说概率用于计算给定事件发生的可能性,该可能性可以表示为1到0之间的数字。例如:当无偏硬币被掷出时获得正面的概率,或者得到3当掷骰子时。
现在,回到问题上,我们必须找到在N次抛硬币中至少获得k个头的可能性。
就像我们有3个硬币,k为2,所以有23 = 8种抛硬币的方法是-
HHH,HTH,HHT,HTT,THH,THT,TTT,TTH。
并且至少包含2个head的集合是-
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];
//计算n次掷出至少k个头的概率。
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();
//从3个硬币中获得1头像的可能性
cout<<"probability is : "<<probability(1, 3) << "\n";
//从6枚硬币中获得3枚的概率
cout<<"probability is : "<<probability(3, 6) <<"\n";
return 0;
}输出结果
probability is : 0.875 probability is : 0.65625