基本递归(2)汉诺塔
**本题来自科创网**
#include<iostream> using namespace std; int read()//输入函数,用于获取输入的数字(包括两位数和三位数等) { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f; } int n,m,nthstep=0;//n是有多少个盘子,m是第几步,nthstep表示现在已到了第几步 void move(int n,char a,char c,char b)//移动函数将B柱充当过渡柱,将A柱上的n片移动到C柱上 { //move函数为递归 if(n==0) return ;//如果盘子被移完了,就结束程序 move(n-1,a,b,c);//先将A柱上前n-1个盘子移到B柱上,将C柱充当过渡柱 nthstep++; if(nthstep==m)//到达了第m步输出结果,结束程序 { cout<<a<<"-->"<<c; exit(0);//break只能用于循环或分支语句 //exit是在调用处强行退出程序,运行一次程序就结束 } move(n-1,b,c,a);//将A柱作为过渡柱,将B柱上的n-1个盘子移到C柱上 return ;//结束 } int main( ) { n=read(); m=read(); //cin>>n>>m; move(n,'A','C','B');//将B柱充当过渡柱,将A柱上的n片移动到C柱上 return 0; }
原题:http://oj.kechuangedu.com/oj/home/problem.htm?problemID=768