汉诺塔是一个古典的数学问题:有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。
#include <stdio.h>
int p=0;//移动次数
void move(char a,char c){
printf("%d: %c---->%c\n",++p,a,c);
}
void hanoi(int n,char a,char b,char c){
if (n==1){
move(a,c);
return ;//切记 return
}
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
int main(void) {
int x;
scanf("%d",&x);
hanoi(x,'a','b','c');
printf("%d-",p);
return 0;
}
本文介绍了一个经典的数学问题——汉诺塔,并使用C语言实现了该问题的解决方案。通过递归的方式,详细展示了如何将A杆上的N个盘子按照规则移动到C杆上,同时记录了移动的步骤。
2万+

被折叠的 条评论
为什么被折叠?



