永发信息网

汉诺塔 C语言问题,求解。

答案:4  悬赏:30  手机版
解决时间 2021-02-02 21:02
hanno问题(即汉诺塔问题):有三个塔(分别为A号,B号和C号)。开始时,有n个圆形盘以从下到上、从大到小的次序叠置在A塔上。现要将A塔上的所有圆形盘,借助B搭,全部移动到C搭上,且仍按照原来的次序叠置。移动的规则如下:这些圆形盘只能在3个塔间进行移动,一次只能移动一个盘子,且任何时候都不允许将最大的盘子压在比它小的盘子上面。A塔为数列a[],B塔为数列b[],C塔为数列c[],n=10,10个任意数,利用递归的方法实现。

求解
最佳答案
#include

void Move(int n, char a, char b, char c)
{
if(n==1)
printf("Move from %c to %c", a, c);
else
{
Move(n-1, a,c,b);
Move(1, a,b,c);
Move(n-1,b,a,c);
}
}

void main()
{
int n;
scanf("%d", &n);
Move(n, 'A', 'B', 'C');
}
全部回答

假设传递进来的后面三个参数是 'a','b','c',那么
  hannuota((n-1),one,three,two);    //<2> 这里是 a,c,b
  move(one,three);    //<3> 这里是 a,c
  hannuota((n-1),two,one,three);   //<4> 这里时 b,a,c

递归调用时,参数的顺序是改变了。

当年我没有认真学习汉诺塔问题,不知道你的问题是不是这个意思?

void Move(int a[],int b[],int c[],int n) { if(n==1) { c[0]=a[0]; return; } Move(a+1,c,b,n-1); c[0]=a[0]; Move(b,a,c+1,n-1); } #include #include #define N 5 int main(void) { int a[N]={5,4,3,2,1},b[N],c[N],i; Move(a,b,c,N); for(i=0;i
  • 3楼网友:思契十里
  • 2021-02-02 17:15
#include void move(int n,char x,char y); void hanoi(int n,char one,char two,char three); int main() { int n; scanf("%d",&n); hanoi(n,'A','B','C'); } void hanoi(int n,char one,char two,char three) { if(n==1) move(1,one,three); else { hanoi(n-1,one,three,two); move(n,one,three); hanoi(n-1,two,one,three); } } void move(int n,char x,char y) { printf("Move disk %d from %c to %c\n",n,x,y); } 这样就行了,另外输入的数不能太大,最好10以内,要是超过64,有你受的,一会半会儿是计算不玩的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯