题目描述
给定 A,B,C三根足够长的细柱,在 A 柱上放有 n个从上到下尺寸依次严格递增中间有空的圆盘。现要将这些圆盘移到 C 柱上,在移动过程中可放在 B柱上暂存。要求:
1.每次只能移动一个圆盘;
2. A、B、C三根细柱上的圆盘都要保持上小下大的顺序。
现在给定 n,你需要输出具有最小操作次数的移动方案,可以证明这样的移动方案是唯一的。
输入
输入仅包含一个正整数 n(1≤n≤17),代表初始时 A柱上圆盘的个数。
输出
每行输出一个操作,使用"->"符号连接该次操作的两个柱子,例如将 A柱最上面的圆盘移动 C 柱最上面用"A->C"表示。
样例输入
3
样例输出
A->C
A->B
C->B
A->C
B->A
B->C
A->C
解答:《c语言程序设计》p249......
#include <stdio.h>
void hanoi(int n,char a,char b,char c)
{
if(n==1)
{
printf("%c->%c\n",a,c);
}else{
hanoi(n-1,a,c,b);
printf("%c->%c\n",a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}