汉诺塔问题属于经典的算法问题,是我们初步学习算法用于实际上手操作的一次很好的练习。这部分代码可体现每一步是哪两根柱子之间的方块移动和统计一共移动多少次。
#include <stdio.h>
int l=0;//用于计数移动了几次
void move(int n,char a,char b,char c)//n表示要移动的块数、a表示最左的柱子、b表示中间的柱子、c表示右边的柱子
{
if(n==1)
{
printf("\t%c->%c\n",a,c);
}
else
{
move (n-1,a,c,b);
printf("\t%c->%c\n",a,c);
move(n-1,b,a,c);
}
l++;
}
int main()
{
int n,m;
printf("请输入要移动的块数:");
scanf("%d",&n);
if(n<=0)//该循环结构可不要,就是确保n为正整数,对于结果而言无影响
{
while(n<=0)
{
printf("请输入正确的块数:");
scanf("%d",&m);
n=m;
}
move(n,'a','b','c');
}
else
{
move(n,'a','b','c');
}
printf("共移动%d步\n",l);
return 0;//jio的还行就点个赞吧,让我搞点积分
}
运行结果如下