Encuentre la probabilidad de que un jugador gane cuando se dan las probabilidades de dar en el blanco

Dados cuatro enteros p , q , r y s . Dos jugadores están jugando un juego en el que ambos jugadores dan en el blanco y el primer jugador que da en el blanco gana el juego. La probabilidad de que el primer jugador dé en el blanco es p/q y la del segundo jugador es r/s . La tarea es encontrar la probabilidad de que el primer jugador gane el juego.

Ejemplos: 

Entrada: p = 1, q = 4, r = 3, s = 4 
Salida: 0,307692308

Entrada: p = 1, q = 2, r = 1, s = 2 
Salida: 0,666666667 

Aproximación: La probabilidad de que el primer jugador dé en el blanco es p/q y fallar el blanco es 1 – p/q
La probabilidad de que el segundo jugador dé en el blanco es de r/s y de que no lo haga es de 1 – r/s
Sea x el primer jugador y y el segundo jugador . 
Así que la probabilidad total será x ganado + (x perdido * y perdido * x ganado) + (x perdido * y perdido * x perdido * y perdido * x ganado) +… así sucesivamente
Como x puede ganar en cualquier turno, es una secuencia infinita. 
Sea t = (1 – p / q) * (1 – r / s) . Aquí t < 1 comop/q y r/s son siempre <1
Entonces la serie se convertirá en, p / q + (p / q) * t + (p / q) * t 2 + … 
Esta es una serie GP infinita con una razón común menor que 1 y su suma será (p / q) / (1 – t) .

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
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

<?php
// PHP implementation of the approach
 
// Function to return the probability
// of the winner
function find_probability($p, $q, $r, $s)
{
    $t = (1 - $p / $q) * (1 - $r / $s);
 
    $ans = ($p / $q) / (1 - $t);
 
    return $ans;
}
 
// Driver Code
$p = 1; $q = 2;
$r = 1; $s = 2;
 
// Will print 9 digits after
// the decimal point
$res = find_probability($p, $q, $r, $s);
$update = number_format($res, 7);
echo $update;
 
// This code is contributed by Rajput-Ji
?>

Javascript

<script>
 
 
// Javascript implementation of the approach
 
// Function to return the probability of the winner
function find_probability(p, q, r, s)
{
 
    var t = (1 - p / q) * (1 - r / s);
 
    var ans = (p / q) / (1 - t);
 
    return ans;
}
 
// Driver Code
var p = 1, q = 2, r = 1, s = 2;
// Will print 9 digits after the decimal point
document.write( find_probability(p, q, r, s).toFixed(9));
 
 
</script>
Producción: 

0.666666667

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por souradeep y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *