Open in App
Not now

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

• Last Updated : 22 Jun, 2022

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

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

 ``

## Javascript

 ``

Output:

`0.52381`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles