# Probability of reaching a point with 2 or 3 steps at a time

A person starts walking from position X = 0, find the probability to reach exactly on X = N if she can only take either 2 steps or 3 steps. Probability for step length 2 is given i.e. P, probability for step length 3 is 1 – P.

Examples :

```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.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

It is a simple dynamic programming problem. It is simple extension of this problem :- count-ofdifferent-ways-express-n-sum-1-3-4

Below is the implementation of the above approach.

## C++

 `// CPP Program to find probability to  ` `// reach N with P probability to take ` `// 2 steps (1-P) to take 3 steps ` `#include ` `using` `namespace` `std; ` ` `  `// Returns probability to reach N ` `float` `find_prob(``int` `N, ``float` `P) ` `{ ` `    ``double` `dp[N + 1]; ` `    ``dp = 1; ` `    ``dp = 0; ` `    ``dp = P; ` `    ``dp = 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; ` `} `

/div>

## 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 = 1; ` `        ``dp = 0; ` `        ``dp = P; ` `        ``dp = 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

 ` `

Output :

```0.32
```