hanno问题(即汉诺塔问题):有三个塔(分别为A号,B号和C号)。开始时,有n个圆形盘以从下到上、从大到小的次序叠置在A塔上。现要将A塔上的所有圆形盘,借助B搭,全部移动到C搭上,且仍按照原来的次序叠置。移动的规则如下:这些圆形盘只能在3个塔间进行移动,一次只能移动一个盘子,且任何时候都不允许将最大的盘子压在比它小的盘子上面。A塔为数列a[],B塔为数列b[],C塔为数列c[],n=10,10个任意数,利用递归的方法实现。
求解
汉诺塔 C语言问题,求解。
答案:4 悬赏:30 手机版
解决时间 2021-02-02 21:02
- 提问者网友:捧腹剧
- 2021-02-02 15:27
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-02-02 17:01
#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');
}
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');
}
全部回答
- 1楼网友:十鸦
- 2021-02-02 17:44
假设传递进来的后面三个参数是 '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
递归调用时,参数的顺序是改变了。
当年我没有认真学习汉诺塔问题,不知道你的问题是不是这个意思?
- 2楼网友:七十二街
- 2021-02-02 17:24
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,有你受的,一会半会儿是计算不玩的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯