Hanoi塔问题

来源:互联网 发布:电气原理图制作软件 编辑:程序博客网 时间:2024/05/03 16:09
Description

(n阶Hanoi塔问题)假设有三个分别命名为A、B、C的塔座,在塔座A上插有n(n<20)个直径大小各不相同、依小到大编号为1,2,…,n的圆盘。现要求将A轴上的n个圆盘移至塔座C上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:1)每次只能移动一个圆盘; 2)圆盘可以插在A、B、C中的任一塔座上;3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。请通过编程来打印出移动的步骤.

Input

只有一组输入数据.输入数据N(;表示在开始时A塔座上的盘子数),当输入0时程序结束.

Output

输出移动的步骤.如"A-->C","A-->B"等.每两的步骤之间有三个空格隔开,每输出5个步骤就换行.详细的见SampleOutput.

Sample Input

520

Sample Output

Hanoi塔问题

格式,输出格式,错了N次!

#include<iostream>
using namespace std;
int k=0;
void h(int n,char one,char two,char three)
{
 void m(char x,char y);
 if(n==1)
 m(one,three);
 else
 {
  h(n-1,one,three,two);
  m(one,three);
  h(n-1,two,one,three);
 }
}
void m(char x,char y)
 
 cout<<x<<"-->"<<y<<"  ";
 if (++k== 5)
 {   
  k = 0;
  cout<<endl;
 }
 
}
int main()
{
    int x;
 while(cin>>x&&x!=0)
 {
 h(x,'A','B','C');
 if (k != 0)  
   
  k = 0;
  cout<< endl; 
 }
 }

}

0 0
原创粉丝点击