 Open in App
Not now

# Find probability that a player wins when probabilities of hitting the target are given

• Last Updated : 23 Jun, 2022

Given four integers p, q, r, and s. Two players are playing a game where both the players hit a target and the first player who hits the target wins the game. The probability of the first player hitting the target is p / q and that of the second player hitting the target is r / s. The task is to find the probability of the first player winning the game.

Examples:

Input: p = 1, q = 4, r = 3, s = 4
Output: 0.307692308

Input: p = 1, q = 2, r = 1, s = 2
Output: 0.666666667

Approach: The probability of the first player hitting the target is p / q and missing the target is 1 – p / q
The probability of the second player hitting the target is r / s and missing the target is 1 – r / s
Let the first player be x and the second player is y
So the total probability will be x won + (x lost * y lost * x won) + (x lost * y lost * x lost * y lost * x won) + … so on
Because x can win at any turn, it’s an infinite sequence.
Let t = (1 – p / q) * (1 – r / s). Here t < 1 as p / q and r / s are always <1
So the series will become, p / q + (p / q) * t + (p / q) * t2 + …
This is an infinite GP series with a common ratio of less than 1 and its sum will be (p / q) / (1 – t).

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to return the probability of the winner` `double` `find_probability(``double` `p, ``double` `q,` `                        ``double` `r, ``double` `s)` `{`   `    ``double` `t = (1 - p / q) * (1 - r / s);`   `    ``double` `ans = (p / q) / (1 - t);`   `    ``return` `ans;` `}`   `// Driver Code` `int` `main()` `{` `    ``double` `p = 1, q = 2, r = 1, s = 2;`   `    ``// Will print 9 digits after the decimal point` `    ``cout << fixed << setprecision(9)` `         ``<< find_probability(p, q, r, s);`   `    ``return` `0;` `}`

## Java

 `// Java implementation of the approach` `import` `java.util.*;` `import` `java.text.DecimalFormat;`   `class` `solution` `{`   `// Function to return the probability of the winner` `static` `double` `find_probability(``double` `p, ``double` `q,` `                        ``double` `r, ``double` `s)` `{`   `    ``double` `t = (``1` `- p / q) * (``1` `- r / s);`   `    ``double` `ans = (p / q) / (``1` `- t);`   `    ``return` `ans;` `}`   `// Driver Code` `public` `static` `void` `main(String args[])` `{` `    ``double` `p = ``1``, q = ``2``, r = ``1``, s = ``2``;`   `    ``// Will print 9 digits after the decimal point` `    ``DecimalFormat dec = ``new` `DecimalFormat(``"#0.000000000"``);` `    ``System.out.println(dec.format(find_probability(p, q, r, s)));` `}` `}` `// This code is contributed by` `// Surendra_Gangwar`

## Python3

 `# Python3 implementation of the approach `   `# Function to return the probability` `# of the winner ` `def` `find_probability(p, q, r, s) :` `    `  `    ``t ``=` `(``1` `-` `p ``/` `q) ``*` `(``1` `-` `r ``/` `s)`   `    ``ans ``=` `(p ``/` `q) ``/` `(``1` `-` `t); `   `    ``return` `round``(ans, ``9``)`   `# Driver Code ` `if` `__name__ ``=``=` `"__main__"` `: `   `    ``p, q, r, s ``=` `1``, ``2``, ``1``, ``2`   `    ``# Will print 9 digits after ` `    ``# the decimal point ` `    ``print``(find_probability(p, q, r, s)) `   `# This code is contributed by Ryuga`

## C#

 `// C# implementation of the approach` `using` `System;`   `class` `GFG` `{`   `// Function to return the probability of the winner` `static` `double` `find_probability(``double` `p, ``double` `q,` `                        ``double` `r, ``double` `s)` `{`   `    ``double` `t = (1 - p / q) * (1 - r / s);`   `    ``double` `ans = (p / q) / (1 - t);`   `    ``return` `ans;` `}`   `// Driver Code` `public` `static` `void` `Main()` `{` `    ``double` `p = 1, q = 2, r = 1, s = 2;` `    ``Console.WriteLine(find_probability(p, q, r, s));` `}` `}`   `// This code is contributed by` `// anuj_67..`

## PHP

 ``

## Javascript

 ``

Output:

`0.666666667`

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles