题目描述
汉诺塔问题是这样的:有3根柱子A,B,C,其中A柱上有64个盘子,盘子大小不等,大的在下,小的在上。要求把这64个盘子从A柱移到C柱上,在移动过程中可以借助B柱,每次只允许移动一个盘子,且在移动过程中在三根柱子上都保持大盘在下,小盘在上。从键盘输入一个整数n(n<=64)表示盘子的个数,打印出移动盘子的正确步骤。
输入要求
从键盘输入盘子的个数n。
输出要求
打印出n个盘子的移动步骤。每一步骤占据一行。
输入样例
3
输出样例
a->c a->b c->b a->c b->a b->c a->c
#include<stdio.h>
#include<math.h>
int move(char k1,char k2);//指向移动输出。
int hnt(int n,char x,char y,char z);//在汉诺塔中意思是x柱上n个圆盘通过y柱媒介移到z柱上。
int main()
{
int n;
scanf("%d",&n);
hnt(n,'a','b','c');
return 0;
}
int move(char k1,char k2){//指向移动输出。
printf("%c->%c\n",k1,k2);//从k1柱上移动到k2柱子上。
}
int hnt(int n,char x,char y,char z){
if(n==1){
move(x,z);
}
else{
hnt(n-1,x,z,y);
move(x,z);
hnt(n-1,y,x,z);
}
}