📖 Scenario: Imagine you are climbing a staircase with a certain number of steps. You can climb either 1 step or 2 steps at a time. You want to find out how many different ways you can reach the top.
🎯 Goal: Build a program that calculates the number of distinct ways to climb to the top of a staircase with n steps, where you can take either 1 or 2 steps at a time.
📋 What You'll Learn
Create an integer variable n with the value 5 (number of steps).
Create an integer array ways of size n+1 to store the number of ways to reach each step.
Initialize the base cases for ways[0] and ways[1].
Use a for loop with variable i from 2 to n to fill the ways array using the relation ways[i] = ways[i-1] + ways[i-2].
Print the number of ways to reach step n.
💡 Why This Matters
🌍 Real World
This problem models situations where you have multiple ways to reach a goal step-by-step, such as climbing stairs or moving through stages in a process.
💼 Career
Understanding dynamic programming and iterative solutions is important for software development roles that involve optimization and algorithm design.
Progress0 / 4 steps
1
Create the number of steps variable
Create an integer variable called n and set it to 5.
DSA C
Hint
Use int n = 5; to create the variable.
2
Create and initialize the ways array
Create an integer array called ways of size n + 1. Initialize ways[0] to 1 and ways[1] to 1.
DSA C
Hint
Remember array size is n + 1. Initialize the first two elements to 1.
3
Calculate ways to climb using a loop
Use a for loop with variable i from 2 to n inclusive. Inside the loop, set ways[i] = ways[i - 1] + ways[i - 2].
DSA C
Hint
Use the formula to fill the array from step 2 to step n.
4
Print the total number of ways
Print the value of ways[n] using printf with the format "%d\n".
DSA C
Hint
Use printf("%d\n", ways[n]); to print the result.
Practice
(1/5)
1. What does the Climbing Stairs problem ask you to find? Given n steps, how many distinct ways can you climb to the top if you can take 1 or 2 steps at a time?
easy
A. The number of steps you skip
B. The total number of distinct ways to reach the top
C. The maximum number of steps you can take at once
D. The minimum number of steps to reach the top
Solution
Step 1: Understand the problem statement
The problem asks for the count of all possible ways to climb to the top using steps of size 1 or 2.
Step 2: Identify what is being counted
We count distinct sequences of 1-step and 2-step moves that sum to n steps.
Final Answer:
The total number of distinct ways to reach the top -> Option B
Quick Check:
Counting ways = total distinct sequences [OK]
Hint: Count sequences of 1 or 2 steps summing to n [OK]
Common Mistakes:
Confusing number of ways with minimum steps
Thinking about maximum step size instead of counting ways
Ignoring the step size options
2. Which of the following is the correct base case initialization for the Climbing Stairs problem in C?
easy
A. int ways[1] = 1; int ways[2] = 2;
B. int ways[0] = 1; int ways[1] = 2;
C. int ways[0] = 0; int ways[1] = 1;
D. int ways[1] = 0; int ways[2] = 1;
Solution
Step 1: Identify base cases for climbing stairs
For 1 step, ways = 1 (only one way). For 2 steps, ways = 2 (1+1 or 2).
Step 2: Match base cases with options
int ways[1] = 1; int ways[2] = 2; correctly sets ways[1] = 1 and ways[2] = 2.
Final Answer:
int ways[1] = 1; int ways[2] = 2; -> Option A
Quick Check:
Base cases: ways[1]=1, ways[2]=2 [OK]
Hint: Remember ways(1)=1 and ways(2)=2 base cases [OK]
Common Mistakes:
Setting ways[0] incorrectly
Confusing ways for 1 and 2 steps
Using zero for ways[1]
3. What is the output of the following C code snippet for n = 4?
int climbStairs(int n) {
if (n <= 2) return n;
int a = 1, b = 2, c;
for (int i = 3; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
printf("%d", climbStairs(4));
Return b=5, which is the number of ways to climb 4 steps.
Final Answer:
5 -> Option C
Quick Check:
Ways(4) = 5 [OK]
Hint: Use Fibonacci-like addition for steps > 2 [OK]
Common Mistakes:
Returning a instead of b
Off-by-one errors in loop
Incorrect initial values
4. Identify the bug in this C function for climbing stairs:
int climbStairs(int n) {
int ways[n+1];
ways[1] = 1;
ways[2] = 2;
for (int i = 3; i <= n; i++) {
ways[i] = ways[i-1] + ways[i-2];
}
return ways[n];
}
medium
A. Array ways is not initialized for ways[0]
B. No bug, code works correctly
C. Accessing ways[2] before initialization
D. Loop should start from i = 2
Solution
Step 1: Check array initialization
Array ways is declared but ways[0] is not initialized, which may cause undefined behavior if accessed.
Step 2: Analyze usage of ways[0]
Though ways[0] is not used in the loop, some compilers or logic might expect it initialized; best practice is to initialize ways[0] = 0.
Final Answer:
Array ways is not initialized for ways[0] -> Option A
Quick Check:
Uninitialized ways[0] can cause issues [OK]
Hint: Always initialize all array elements before use [OK]
Common Mistakes:
Ignoring ways[0] initialization
Assuming no undefined behavior without ways[0]
Starting loop incorrectly
5. You want to find the number of ways to climb 10 steps but can take 1, 2, or 3 steps at a time. Which modification to the standard climbing stairs approach is correct?
hard
A. Use ways[i] = ways[i-1] + ways[i-3] with base cases ways[0]=1, ways[1]=1, ways[2]=2
B. Use ways[i] = ways[i-1] * ways[i-2] * ways[i-3] with base cases ways[0]=1, ways[1]=1, ways[2]=2
C. Use ways[i] = ways[i-1] + ways[i-2] with base cases ways[0]=1, ways[1]=1
D. Use ways[i] = ways[i-1] + ways[i-2] + ways[i-3] with base cases ways[0]=1, ways[1]=1, ways[2]=2
Solution
Step 1: Understand step size options
Since steps can be 1, 2, or 3, ways to reach step i include ways to reach i-1, i-2, and i-3.
Step 2: Formulate recurrence and base cases
ways[i] = ways[i-1] + ways[i-2] + ways[i-3]; base cases: ways[0]=1 (one way to stand still), ways[1]=1, ways[2]=2.
Final Answer:
Use ways[i] = ways[i-1] + ways[i-2] + ways[i-3] with base cases ways[0]=1, ways[1]=1, ways[2]=2 -> Option D
Quick Check:
Sum previous 3 ways for steps 1,2,3 [OK]
Hint: Add ways for all allowed step sizes [OK]
Common Mistakes:
Multiplying ways instead of adding
Ignoring the 3-step option
Using wrong base cases
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.