Bird
Raised Fist0
DSA Cprogramming~10 mins

Tower of Hanoi Problem in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to print the move from source to destination.

DSA C
printf("Move disk from %c to %c\n", [1], dest);
Drag options to blanks, or click blank then click option'
Adest
Bdisk
Ctemp
Dsrc
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'dest' instead of 'src' for the source peg.
Using an undefined variable like 'disk'.
2fill in blank
medium

Complete the code to move n-1 disks from source to temporary peg.

DSA C
towerOfHanoi([1] - 1, src, temp, dest);
Drag options to blanks, or click blank then click option'
An
Bsrc
Ctemp
Ddest
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'src' or peg names instead of the number of disks.
Using n instead of n-1.
3fill in blank
hard

Fix the error in the base case condition to stop recursion.

DSA C
if ([1] == 1) {
Drag options to blanks, or click blank then click option'
An
Bsrc
Ctemp
Ddest
Attempts:
3 left
💡 Hint
Common Mistakes
Checking peg names instead of the number of disks.
Using 'n == 0' which never triggers the move.
4fill in blank
hard

Fill both blanks to move n-1 disks from temporary to destination peg.

DSA C
towerOfHanoi([1] - 1, [2], src, dest);
Drag options to blanks, or click blank then click option'
An
Btemp
Csrc
Ddest
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping source and temporary pegs incorrectly.
Using n instead of n-1.
5fill in blank
hard

Fill all three blanks to complete the recursive Tower of Hanoi function signature.

DSA C
void towerOfHanoi(int [1], char [2], char [3], char dest) {
Drag options to blanks, or click blank then click option'
An
Bsrc
Ctemp
Ddisk
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'disk' as a parameter name.
Mixing peg names or missing the number of disks parameter.

Practice

(1/5)
1. What is the minimum number of moves required to solve the Tower of Hanoi problem with 3 disks?
easy
A. 6
B. 5
C. 9
D. 7

Solution

  1. Step 1: Understand the formula for minimum moves

    The minimum moves required for n disks is 2^n - 1.
  2. Step 2: Calculate for 3 disks

    For 3 disks, minimum moves = 2^3 - 1 = 8 - 1 = 7.
  3. Final Answer:

    7 -> Option D
  4. Quick Check:

    2^3 - 1 = 7 [OK]
Hint: Use formula 2^n - 1 for minimum moves [OK]
Common Mistakes:
  • Using n instead of 2^n - 1
  • Calculating 2*n - 1 instead of 2^n - 1
  • Confusing number of disks with moves
2. Which of the following is the correct recursive function signature in C for solving Tower of Hanoi?
easy
A. void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod);
B. int towerOfHanoi(int n, char from_rod, char to_rod);
C. void towerOfHanoi(int n, int from_rod, int to_rod);
D. void towerOfHanoi(int n, char from_rod, char to_rod);

Solution

  1. Step 1: Identify parameters needed for Tower of Hanoi

    We need number of disks and names of three rods: source, destination, auxiliary.
  2. Step 2: Check function signature matching these parameters

    void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod); has int n and three char rods, matching the problem requirements.
  3. Final Answer:

    void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod); -> Option A
  4. Quick Check:

    Function needs 3 rods and disk count [OK]
Hint: Tower of Hanoi needs 3 rods as parameters [OK]
Common Mistakes:
  • Missing auxiliary rod parameter
  • Using int instead of char for rods
  • Returning int instead of void
3. What will be the output of the following C code snippet for Tower of Hanoi with 2 disks?
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
  if (n == 1) {
    printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
    return;
  }
  towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
  printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
  towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}

int main() {
  towerOfHanoi(2, 'A', 'C', 'B');
  return 0;
}
medium
A. Move disk 2 from rod A to rod C Move disk 1 from rod A to rod B Move disk 2 from rod B to rod C
B. Move disk 1 from rod A to rod C Move disk 2 from rod A to rod B Move disk 1 from rod C to rod B
C. Move disk 1 from rod A to rod B Move disk 2 from rod A to rod C Move disk 1 from rod B to rod C
D. Move disk 1 from rod B to rod C Move disk 2 from rod A to rod C Move disk 1 from rod A to rod B

Solution

  1. Step 1: Trace recursive calls for n=2

    First move disk 1 from A to B, then disk 2 from A to C, then disk 1 from B to C.
  2. Step 2: Match output with options

    Move disk 1 from rod A to rod B Move disk 2 from rod A to rod C Move disk 1 from rod B to rod C matches the exact sequence of moves printed by the code.
  3. Final Answer:

    Move disk 1 from rod A to rod B Move disk 2 from rod A to rod C Move disk 1 from rod B to rod C -> Option C
  4. Quick Check:

    Recursive moves for 2 disks = Move disk 1 from rod A to rod B Move disk 2 from rod A to rod C Move disk 1 from rod B to rod C [OK]
Hint: For 2 disks, move smaller disk to aux first [OK]
Common Mistakes:
  • Swapping auxiliary and destination rods
  • Printing moves in wrong order
  • Confusing disk numbers
4. Identify the error in the following Tower of Hanoi C function and select the correct fix:
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
  if (n == 0) {
    return;
  }
  towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
  printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
  towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}
medium
A. Change base case condition to if (n == 1) instead of if (n == 0)
B. Add else before recursive calls
C. Change printf to print n-1 instead of n
D. Swap aux_rod and to_rod in recursive calls

Solution

  1. Step 1: Analyze base case condition

    Base case should stop recursion when n == 1, not 0, to print the last move.
  2. Step 2: Understand effect of current base case

    With n == 0, no moves are printed for the smallest disk, causing no output.
  3. Final Answer:

    Change base case condition to if (n == 1) instead of if (n == 0) -> Option A
  4. Quick Check:

    Base case must be n == 1 to print moves [OK]
Hint: Base case must be n == 1 to print last move [OK]
Common Mistakes:
  • Using n == 0 as base case
  • Changing print statement unnecessarily
  • Swapping rods incorrectly
5. You want to solve Tower of Hanoi for 4 disks but print only the moves where disk 1 is moved. Which modification to the recursive function is correct?
void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod) {
  if (n == 1) {
    printf("Move disk 1 from rod %c to rod %c\n", from_rod, to_rod);
    return;
  }
  towerOfHanoi(n-1, from_rod, aux_rod, to_rod);
  printf("Move disk %d from rod %c to rod %c\n", n, from_rod, to_rod);
  towerOfHanoi(n-1, aux_rod, to_rod, from_rod);
}
hard
A. Remove all recursive calls except for n == 1 case
B. Add condition to print only if n == 1 inside the function
C. Print all moves but filter disk 1 moves outside the function
D. Change base case to n == 0 and print only disk 1 moves

Solution

  1. Step 1: Understand requirement to print only disk 1 moves

    We must print moves only when disk number is 1 inside the recursive function.
  2. Step 2: Modify print statements accordingly

    Keep recursive calls intact but print only when n == 1, skipping other prints.
  3. Final Answer:

    Add condition to print only if n == 1 inside the function -> Option B
  4. Quick Check:

    Print condition inside recursion for disk 1 only [OK]
Hint: Print moves only when disk number is 1 inside recursion [OK]
Common Mistakes:
  • Removing recursive calls breaks solution
  • Filtering outside loses recursion context
  • Changing base case incorrectly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard