题目描述
汉诺塔问题是这样的:有3根柱子A,B,C,其中A柱上有64个盘子,盘子大小不等,大的在下,小的在上。要求把这64个盘子从A柱移到C柱上,在移动过程中可以借助B柱,每次只允许移动一个盘子,且在移动过程中在三根柱子上都保持大盘在下,小盘在上。从键盘输入一个整数n(n<=64)表示盘子的个数,打印出移动盘子的正确步骤。
输入要求
从键盘输入盘子的个数n。
输出要求
打印出n个盘子的移动步骤。每一步骤占据一行。
输入样例
3
输出样例
a->c a->b c->b a->c b->a b->c a->c
#include <stdio.h>
void move(int n, char a, char b, char c) {//将n个盘子从a经过b移动到c
if (n == 1) {
printf("%c->%c\n", a, c);
} else {
move(n - 1, a, c, b);//将n-1个盘子从a经过c移动到b
printf("%c->%c\n", a, c);
move(n - 1, b, a, c);//将n-1个盘子从b经过a移动到c
}
}
int main() {
int n;
scanf("%d", &n);
move(n, 'a', 'b', 'c');
return 0;
}