
汉诺塔问题的C语言程序应该怎么写?并请说明一下原因
1个回答
展开全部
其实主要就是三个步骤:
第一,把a上的n-1个盘通过c移动到b。
第二,把a上的最下面的盘移到c。
第三,因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了。
#include<stdio.h>
void move(int n,char a,char b,char c)
{
if(n==1)
printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从a移动到c
else
{
move(n-1,a,c,b); //第n-1个要从a通过c移动到b
printf("\t%c->%c\n",a,c);
move(n-1,b,a,c); //n-1个移动过来之后b变开始盘,b通过a移动到c
}
}
int main()
{
int n;
printf("请输入要移动的块数:");
scanf("%d",&n);
move(n,'a','b','c');
return 0;
}
更多追问追答
追问
move(n-1,a,c,b); //第n-1个要从a通过c移动到b
printf("\t%c->%c\n",a,c);
move(n-1,b,a,c)
这一部分怎么理解?
追答
你可以简单的理解成:
首先我要把上边n-1个盘子全部从a借助c移动到b上
这样a上还有一个最大的,c上没有,就可以把a上这个移到c上了
这样是不是和原始状态一致了呢?相当于b是原始的a了
因为每一次都是递归执行的,当 move(n-1,a,c,b); printf("\t%c->%c\n",a,c);执行完之后就已经做到了上述2的状态,那下一步要做的就是把n-1个从b借助a移到c上,让所有的盘子都在c上
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |