一、解题思路递归法
1、把A上面n-1个盘子移动到B上。
2、把A上最后一个移动到C;
3、把B上n-1个移动到A上,再把B上最后一个移动到C;
如此循环2,3,步骤,直到把最后一个盘子移动到C上
二、代码如下:
#include <stdio.h>
void move(char x,char y) //移动函数
{
printf("%c->%c ",x,y); //每移动一次打印
}
long long HanTower(int n,char A,char B,char C)
{
static long long count = 0;
count++; //移动次数
if (n==1)
{
move(A,C); //移动
}
else
{
HanTower(n-1,A,C,B); //递归调用
move(A,C);
HanTower(n-1,B,A,C); //递归调用
}
return count; //返回移动次数
}
int main ()
{
int n = 0;
long long ret =0;
printf("please enter:");
scanf("%d",&n); //输入需要移动的盘子数
printf("the step:");
ret=HanTower(n,'A','B','C'); //汉诺塔函数
printf("\nmove number: %ld\n",ret); //打印移动次数
return 0;
}
三、运行结果
3个盘子
5个盘子
8个盘子
四、神叨叨,本题我能想到的只有递归解决,想清楚递归过程,思路还是比较清楚的。