Skip to content
Related Articles
Find probability that a player wins when probabilities of hitting the target are given
• Last Updated : 25 May, 2021

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# mplementation 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`

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live

My Personal Notes arrow_drop_up