Una persona comienza a caminar desde la posición X = 0, encuentre la probabilidad de llegar exactamente a X = N si solo puede dar 2 pasos o 3 pasos. La probabilidad para la longitud del paso 2 se da, es decir, P, la probabilidad para la longitud del paso 3 es 1 – P.
Ejemplos:
Input : N = 5, P = 0.20 Output : 0.32 Explanation :- There are two ways to reach 5. 2+3 with probability = 0.2 * 0.8 = 0.16 3+2 with probability = 0.8 * 0.2 = 0.16 So, total probability = 0.32.
Es un problema simple de programación dinámica . Es una extensión simple de este problema: – count-of different-ways-express-n-sum-1-3-4
A continuación se muestra la implementación del enfoque anterior.
C++
// CPP Program to find probability to // reach N with P probability to take // 2 steps (1-P) to take 3 steps #include <bits/stdc++.h> using namespace std; // Returns probability to reach N float find_prob(int N, float P) { double dp[N + 1]; dp[0] = 1; dp[1] = 0; dp[2] = P; dp[3] = 1 - P; for (int i = 4; i <= N; ++i) dp[i] = (P)*dp[i - 2] + (1 - P) * dp[i - 3]; return dp[N]; } // Driver code int main() { int n = 5; float p = 0.2; cout << find_prob(n, p); return 0; }
Java
// Java Program to find probability to // reach N with P probability to take // 2 steps (1-P) to take 3 steps import java.io.*; class GFG { // Returns probability to reach N static float find_prob(int N, float P) { double dp[] = new double[N + 1]; dp[0] = 1; dp[1] = 0; dp[2] = P; dp[3] = 1 - P; for (int i = 4; i <= N; ++i) dp[i] = (P) * dp[i - 2] + (1 - P) * dp[i - 3]; return ((float)(dp[N])); } // Driver code public static void main(String args[]) { int n = 5; float p = 0.2f; System.out.printf("%.2f",find_prob(n, p)); } } /* This code is contributed by Nikita Tiwari.*/
Python3
# Python 3 Program to find # probability to reach N with # P probability to take 2 # steps (1-P) to take 3 steps # Returns probability to reach N def find_prob(N, P) : dp =[0] * (n + 1) dp[0] = 1 dp[1] = 0 dp[2] = P dp[3] = 1 - P for i in range(4, N + 1) : dp[i] = (P) * dp[i - 2] + (1 - P) * dp[i - 3] return dp[N] # Driver code n = 5 p = 0.2 print(round(find_prob(n, p), 2)) # This code is contributed by Nikita Tiwari.
C#
// C# Program to find probability to // reach N with P probability to take // 2 steps (1-P) to take 3 steps using System; class GFG { // Returns probability to reach N static float find_prob(int N, float P) { double []dp = new double[N + 1]; dp[0] = 1; dp[1] = 0; dp[2] = P; dp[3] = 1 - P; for (int i = 4; i <= N; ++i) dp[i] = (P) * dp[i - 2] + (1 - P) * dp[i - 3]; return ((float)(dp[N])); } // Driver code public static void Main() { int n = 5; float p = 0.2f; Console.WriteLine(find_prob(n, p)); } } /* This code is contributed by vt_m.*/
PHP
<?php // PHP Program to find probability to // reach N with P probability to take // 2 steps (1-P) to take 3 steps // Returns probability to reach N function find_prob($N, $P) { $dp; $dp[0] = 1; $dp[1] = 0; $dp[2] = $P; $dp[3] = 1 - $P; for ($i = 4; $i <= $N; ++$i) $dp[$i] = ($P) * $dp[$i - 2] + (1 - $P) * $dp[$i - 3]; return $dp[$N]; } // Driver code $n = 5; $p = 0.2; echo find_prob($n, $p); // This code is contributed by mits. ?>
Javascript
<script> // JavaScript Program to find probability to // reach N with P probability to take // 2 steps (1-P) to take 3 steps // Returns probability to reach N function find_prob(N, P) { let dp = []; dp[0] = 1; dp[1] = 0; dp[2] = P; dp[3] = 1 - P; for (let i = 4; i <= N; ++i) dp[i] = (P) * dp[i - 2] + (1 - P) * dp[i - 3]; return (dp[N]); } // Driver Code let n = 5; let p = 0.2; document.write(find_prob(n, p)); // This code is contributed by chinmoy1997pal. </script>
Producción :
0.32
Publicación traducida automáticamente
Artículo escrito por Sakshi_Tiwari y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA