汉诺塔的代码当然是要背诵的。
【题目描述】
输入n,代表有n个圆盘。共有a,b,c三个杆子,输出结果表示如何移动圆盘,完成汉诺塔的求解。
【示例代码】
算法描述见注释。
令人费解的事情:9~11行和13~15行长得一样对吧?但是9~11行会报错Expected expression
。至今我未发现有什么不同,也许是xcode的bug?
//
// 算法描述:先将1~n-1号从a移动到b,然后将n号从a移动到c,然后将1~n号从b移动到c
//
#include<stdio.h>
#define MAX_N 20
//void Move(int n,char a,char b){ //将n号圆盘从a移动到b //Expected expression
// printf("编号为%d的盘子:%c==>%c\n",n,a,b);
//}
void Move(int n,char a,char b){ //将n号圆盘从a移动到b
printf("编号为%d的盘子:%c==>%c\n",n,a,b);
}
void Hanoi(int n,char a,char b,char c){ //将1~n号圆盘从a杆移动到c杆,b杆为辅助
if(n>0){ //限定递归边界
Hanoi(n-1,a,c,b); //先将1~n-1号圆盘从a移动到b
Move(n,a,c); //将n号从a移动到c
Hanoi(n-1,b,a,c); //将1~n-1号从b移动到c
}
}
int main(){
int n;
while(scanf("%d",&n)==1){
Hanoi(n,'a','b','c'); //注意不要将'a','b','c'写成a,b,c
}
return 0;
}