Climbing Stairs in C++



There are n stairs. One person will go to 1st to nth stairs. Maximum how many stairs he/she can cross in one step is also given. With this information, we have to find possible ways to go to the nth stairs. Let us consider one can cross a maximum two stairs in each step. So we can find recursive relations to solve this problem. One can move to nth stair, either from (n-1)th stair or from (n-2)th stair. So ways(n) = ways(n-1) + ways(n-2).

Suppose the number of stairs, say 10, the maximum number of stairs that can be jumped in one step, say 2, then the output will be 89 possible ways.

To solve this, follow these steps −

  • define array count of size same as stair number
  • count[0] := 1
  • for i := 2 to stair -1, do
    • count[i] := 0
    • for j = 1 to i and j <= max; do
      • count[i] := count[i] + count[i - j]
  • return count[stair - 1]

Let us see the implementation to get better understanding

Example (C++)

 Live Demo

#include<iostream>
using namespace std;
int stairClimbWays(int stair, int max){
   int count[stair]; //fill the result stair using bottom up manner
   count[0] = 1; //when there are 0 or 1 stair, 1 way to climb
   count[1] = 1;
   for (int i=2; i<stair; i++){ //for stair 2 to higher
      count[i] = 0;
      for(int j=1; j<=max && j<=i; j++)
         count[i] += count[i-j];
   }
   return count[stair-1];
}
int countWays(int stair, int max){ //person can climb 1,2,...max stairs at a time
   return stairClimbWays(stair+1, max);
}
int main (){
   int stair, max;
   cout << "Enter number of stairs: "; cin >> stair;
   cout << "Enter max stair a person can climb: "; cin >> max;
   cout << "Number of ways to reach: " << countWays(stair, max);
}

Input

Stairs = 10
Max stairs a person can climb: 2

Output

Enter number of stairs: 10
Enter max stair a person can climb: 2
Number of ways to reach: 89

Advertisements