Problem Description
汉诺塔(又称河内塔)问题是印度的一个古老的传说。
开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。
僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了。
聪明的你还有计算机帮你完成,你能写一个程序帮助僧侣们完成这辈子的夙愿吗?
Input
输入金片的个数n。这里的n<=10。
Output
输出搬动金片的全过程。格式见样例。
Example Input
2
Example Output
Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C
Hint
可以用递归算法实现。
体会:
刚开始做这题的时候没有头绪,不敢做,放置了很久才重新来审视这个题。上网找视频,看着视频把代码敲出来,然后再细细体会,删掉代码自己独立又推敲了一次,这才把网上老师讲的话体会到!!
我想这就是进步——避开你的安逸区,做你怕的事情。
代码如下:
#include<stdio.h>
void Move(int n, char a, char b)
{
printf("Move disk %d from %c to %c\n", n, a, b);
}
void Hanoi(int n, char a, char b, char c)//将第n号圆盘借助于c从a移到b上
{
if (n == 1)
Move(n, a, b);
if (n > 1)
{
Hanoi(n - 1, a, c, b);
Move(n, a, b);
Hanoi(n - 1, c, b, a);
}
}
int main()
{
int n;
scanf("%d", &n);
Hanoi(n, 'A', 'C', 'B');
return 0;
}
/***************************************************
User name: ***
Result: Accepted
Take time: 0ms
Take Memory: 160KB
Submit time: 2017-06-04 21:01:36
****************************************************/