# 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