# 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.