Dados los números enteros N, M y p , la tarea es encontrar la probabilidad de acertar en un objetivo por N -ésima vez en el M -ésimo lanzamiento, donde p es la probabilidad de acertar en el objetivo.
Ejemplos:
Entrada: N = 1, M = 2, p = 0.3
Salida: 0.21
Explicación: El objetivo puede ser alcanzado por primera vez en el segundo lanzamiento solo cuando el primer lanzamiento es fallido.
Entonces, la probabilidad es la multiplicación de la probabilidad de dar en el blanco en el segundo lanzamiento y la probabilidad de fallar el objetivo en el primer lanzamiento = 0.3 * 0.7 = 0.21
porque la probabilidad de fallar = 1 – probabilidad de acertar.Entrada : N = 8, M = 17, p = 0,4,
Salida : 0,07555569565040642
Enfoque: La idea para resolver el problema se basa en la distribución binomial de probabilidad
Para obtener el N -ésimo hit en el M -th lanzamiento, debe haber N-1 hits en los M-1 lanzamientos anteriores y el N-th throw debe ser un hit.
Digamos que p es la probabilidad de acertar y q es la probabilidad de fallar. q = 1 – pág.
Entonces, la probabilidad de acertar N-1 en M-1 lanzamientos es:
X = M-1 C N-1 (p N-1 q M-1-(N-1) ) = M-1 C N-1 ( p N-1 q M-N )
Por lo tanto, la probabilidad de acertar N -ésima vez es p*X = M-1 C N-1 (p N qMN )
Siga los pasos a continuación para implementar la idea anterior:
- En primer lugar, obtenga la probabilidad de no dar en el blanco.
- Obtenga el valor de X como se muestra arriba.
- Multiplique el valor de ‘p’ con él para obtener la respuesta real.
A continuación se muestra la implementación del enfoque anterior.
C++
// Cpp code to implement the approach #include <bits/stdc++.h> using namespace std; // Function to find the factorial of a number int fact(int f) { int fact = 1; for (int i = 1; i <= f; i++) fact = i * fact; return fact; } // Function to find the probability // of Nth hit at Mth throw double probab(double p, int m, int n) { double q = 1 - p; double res = fact(m - 1) / fact(n - 1) / fact(m - n) * pow(p, (n - 1)) * pow(q, (m - n)) * p; return res; } // Driver code int main() { double p = 0.3; int M = 2; int N = 1; // Function call cout << probab(p, M, N); return 0; } // This code is contributed by ANKITKUMAR34.
Java
// Java code for above approach import java.util.*; class GFG { // Function to find the factorial of a number public static int fact(int f) { int fact = 1; for (int i = 1; i <= f; i++) fact = i * fact; return fact; } // Function to find the probability // of Nth hit at Mth throw public static double probab(double p, int m, int n) { double q = 1 - p; double res = fact(m - 1) / fact(n - 1) / fact(m - n) * Math.pow(p, (n - 1)) * Math.pow(q, (m - n)) * p; return res; } // Driver code public static void main(String[] args) { double p = 0.3; int M = 2; int N = 1; // Function call System.out.println(probab(p, M, N)); } } // This code is contributed by Pushpesh Raj.
Python3
# Python code to implement the approach # Function to find the probability # of Nth hit at Mth throw def probab(p, m, n): q = 1-p res = fact(m-1)/fact(n-1)/fact(m-n)*p**(n-1)*q**(m-n)*p return res # Function to find the factorial of a number def fact(f): fact = 1 for i in range(1, f + 1): fact = i * fact return fact # Driver code if __name__ == '__main__': p = 0.3 M = 2 N = 1 # Function call print(probab(p, M, N))
C#
// C# code for above approach using System; public class GFG { // Function to find the factorial of a number public static int fact(int f) { int fact = 1; for (int i = 1; i <= f; i++) fact = i * fact; return fact; } // Function to find the probability // of Nth hit at Mth throw public static double probab(double p, int m, int n) { double q = 1 - p; double res = fact(m - 1) / fact(n - 1) / fact(m - n) * Math.Pow(p, (n - 1)) * Math.Pow(q, (m - n)) * p; return res; } // Driver code public static void Main(string[] args) { double p = 0.3; int M = 2; int N = 1; // Function call Console.WriteLine(probab(p, M, N)); } } // This code is contributed by AnkThon
Javascript
<script> // Javascript code to implement the approach // Function to find the factorial of a number function fact(f) { let fact = 1; for (let i=1; i<=f; i++ ) fact = i * fact; return fact; } // Function to find the probability //of Nth hit at Mth throw function probab(p, m, n) { let q = 1-p; let res = fact(m-1) / fact(n-1) / fact(m-n) * Math.pow(p, (n-1)) * Math.pow(q, (m-n)) * p; return res; } // Driver code let p = 0.3; let M = 2; let N = 1; // Function call document.write(probab(p, M, N)) // This code is contributed by Saurabh Jaiswal </script>
0.21
Tiempo Complejidad: O(M)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por Atul_kumar_Shrivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA