基本递归(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

posted @ 2016-10-18 22:23  君翼坦荡荡~  阅读(185)  评论(1编辑  收藏  举报