Probability of A winning the match when individual probabilities of hitting the target given

Given four integers a, b, c and d. Player A & B try to score a penalty. Probability of A shooting the target is a / b while probability of B shooting the target is c / d. The player who scores the penalty first wins. The task is to find the probability of A winning the match.

Examples:

Input: a = 1, b = 3, c = 1, d = 3
Output: 0.6

Input: a = 1, b = 2, c = 10, d = 11
Output: 0.52381

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: If we consider variables K = a / b as the probability of A shooting the target and R = (1 – (a / b)) * (1 – (c / d)) as the probability that A as well as B both missing the target.
Therefore, the solution forms a Geometric progression K * R0 + K * R1 + K * R2 + ….. whose sum is (K / 1 – R). After putting the values of K and R we get the formula as K * (1 / (1 – (1 – r) * (1 – k))).

Below is the implementation of the above approach:

C++

 // C++ implementation of the approach #include using namespace std;    // Function to return the probability of A winning double getProbability(int a, int b, int c, int d) {        // p and q store the values     // of fractions a / b and c / d     double p = (double)a / (double)b;     double q = (double)c / (double)d;        // To store the winning probability of A     double ans = p * (1 / (1 - (1 - q) * (1 - p)));     return ans; }    // Driver code int main() {     int a = 1, b = 2, c = 10, d = 11;     cout << getProbability(a, b, c, d);        return 0; }

Java

 // Java implementation of the approach class GFG  {    // Function to return the probability // of A winning static double getProbability(int a, int b,                               int c, int d)  {        // p and q store the values     // of fractions a / b and c / d     double p = (double) a / (double) b;     double q = (double) c / (double) d;        // To store the winning probability of A     double ans = p * (1 / (1 - (1 - q) *                                 (1 - p)));     return ans; }    // Driver code public static void main(String[] args) {     int a = 1, b = 2, c = 10, d = 11;     System.out.printf("%.5f",                 getProbability(a, b, c, d)); } }    // This code contributed by Rajput-Ji

Python3

 # Python3 implementation of the approach     # Function to return the probability # of A winning  def getProbability(a, b, c, d) :         # p and q store the values      # of fractions a / b and c / d      p = a / b;     q = c / d;            # To store the winning probability of A     ans = p * (1 / (1 - (1 - q) * (1 - p)));            return round(ans,5);     # Driver code  if __name__ == "__main__" :         a = 1; b = 2; c = 10; d = 11;      print(getProbability(a, b, c, d));     # This code is contributed by Ryuga

C#

 // C# implementation of the approach  using System;    class GFG {    // Function to return the probability  // of A winning  public static double getProbability(int a, int b,                                      int c, int d) {        // p and q store the values      // of fractions a / b and c / d      double p = (double) a / (double) b;     double q = (double) c / (double) d;        // To store the winning probability of A      double ans = p * (1 / (1 - (1 - q) *                                 (1 - p)));     return ans; }    // Driver code  public static void Main(string[] args) {     int a = 1, b = 2, c = 10, d = 11;     Console.Write("{0:F5}",                     getProbability(a, b, c, d)); } }    // This code is contributed by Shrikant13

PHP



Output:

0.52381

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.