题目描述
- 每次只能移动一个圆盘
- 大的圆盘不能放在小的圆盘上面
- 可以使用一根额外的柱子作为辅助
默认三个柱子,盘子数量为N,
解法思路
设A\B\C三个柱子
将A柱上的n个盘子挪到C柱上,只有一个盘子的时候,只需从A挪到C。如果盘子的数量大于两个,将n-1个盘子从A挪到B,再将最下面的那个盘子从A挪到C 再将B上的n-1个盘子挪到C上 ......
解法代码
cs
#include <stdio.h>
void move(int num, char x, char y)
{
printf("第%d个盘子,%c--->%c\n", num, x, y);
}
void hannot(int num, char A, char B, char C)
{
if (num == 1)
{
move(num, A, C);
}
else
{
hannot(num - 1, A, C, B);
move(num, A, C);
hannot(num - 1, B, A, C);
}
}
int main()
{
int num = 0; // 盘子数量
printf("请输入盘子的数量: ");
scanf("%d", &num);
hannot(num, 'A', 'B', 'C'); // A起始位置,B中转位置,C目标位置
return 0;
}
运行结果
请输入盘子的数量:
3
第1个盘子,A--->C
第2个盘子,A--->B
第1个盘子,C--->B
第3个盘子,A--->C
第1个盘子,B--->A
第2个盘子,B--->C
第1个盘子,A--->C