给定两个硬币分别具有正面概率p%和q%的概率,任务是确定在给定硬币中选择随机硬币后确定获得两个连续正面的概率。
例子:
Input: p = 33, q = 66
Output: 0.550000000000000
Input: p = 33, q = 66
Output: 0.550000000000000
方法:
由于两个硬币都不相同,因此将使用贝叶斯定理来获得所需的概率。
由于硬币是随机选择的,因此可以选择它们中的任何一个,因此p和q将包括在计算中。应用贝叶斯定理后,所需的答案将是(p * p + q * q)/(p + q),因为如果选择了第一个硬币,则使两个头背对背的概率为p * p,并且对于第二枚硬币。
这是贝叶斯定理的一个应用。
P(B | A) = P(A |^| B) / P(A) = (1/2 * p * p + 1/2 * q * q) / (1/2 * p + 1/2 * q) = (p * p + q * q) / (p + q) where;
P(B) = probability to get heads on the second throw,
P(A) = probability to get heads on the first throw and
P(A |^| B) = probability to get heads on both the throws.
So, P(B | A) is the probability to get heads on the second throw if we are given that we got heads
on the first one.
Here A, B denotes 1st and 2nd coin.
下面是上述方法的实现:
C++
// C++ program to get the probability
// of getting two consecutive heads
#include
using namespace std;
// Function to return the probability
// of getting two consecutive heads
double getProbability(double p, double q)
{
p /= 100;
q /= 100;
// Formula derived from Bayes's theorem
double probability = (p * p + q * q) / (p + q);
return probability;
}
// Driver code
int main()
{
double p, q;
// given the probability of getting
// a head for both the coins
p = 80;
q = 40;
cout << fixed
<< setprecision(15)
<< getProbability(p, q)
<< endl;
return 0;
}
Java
// Java program to get the probability
// of getting two consecutive heads
import java.io.*;
class GFG {
// Function to return the probability
// of getting two consecutive heads
static double getProbability(double p, double q)
{
p /= 100;
q /= 100;
// Formula derived from Bayes's theorem
double probability = (p * p + q * q) / (p + q);
return probability;
}
// Driver code
public static void main (String[] args) {
double p, q;
// given the probability of getting
// a head for both the coins
p = 80;
q = 40;
System.out.println( getProbability(p, q));
}
}
// This code is contributed by anuj_67..
Python 3
# Python 3 program to get the probability
# of getting two consecutive heads
# Function to return the probability
# of getting two consecutive heads
def getProbability(p, q):
p /= 100
q /= 100
# Formula derived from Bayes's theorem
probability = (p * p + q * q) / (p + q)
return probability
# Driver code
if __name__ == "__main__":
# given the probability of getting
# a head for both the coins
p = 80
q = 40
print(getProbability(p, q))
# This code is contributed
# by ChitraNayal
C#
// C# program to get the probability
// of getting two consecutive heads
using System;
class GFG {
// Function to return the probability
// of getting two consecutive heads
static double getProbability(double p, double q)
{
p /= 100;
q /= 100;
// Formula derived from Bayes's theorem
double probability = (p * p + q * q) / (p + q);
return probability;
}
// Driver code
public static void Main () {
double p, q;
// given the probability of getting
// a head for both the coins
p = 80;
q = 40;
Console.WriteLine( getProbability(p, q));
}
}
// This code is contributed by inder_verma..
PHP
Javascript
0.666666666666667