Related Articles

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

• Last Updated : 02 Jun, 2021

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`

My Personal Notes arrow_drop_up