zoukankan      html  css  js  c++  java
  • hoj 1067 又是Hanoi塔问题

    又是Hanoi塔问题

    Time Limit:1000MS  Memory Limit:65536K
    Total Submit:149 Accepted:70

    Description

    A、B、C 是3个塔座。开始时,在塔座A 上有一叠共n 个圆盘,这些圆盘自下而上, 由大到小地叠在一起。各圆盘从小到大编号为1,2,……,n,奇数号圆盘着蓝色,偶数号圆盘着红色,如图所示。现要求将塔座A 上的这一叠圆盘移到塔座B 上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则:
    规则(1):每次只能移动1个圆盘;
    规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;
    规则(3):任何时刻都不允许将同色圆盘叠在一起;
    规则(4):在满足移动规则(1)-(3)的前提下,可将圆盘移至A,B,C 中任一塔座上。

    按照上述四种规则移动过程中,如将圆盘从A柱移到B柱,则称B柱使用一次。例如要将塔座A上2个圆盘,按上述四种规则移动到B柱,A柱使用0次,B柱使用2次,C柱使用1次。试设计一个算法,统计用最少的移动次数将塔座A 上的n个圆盘移到塔座B 上并仍按同样顺序叠置时,A柱、B柱、C柱的使用次数。

    编程任务:

    对于给定的正整数n,编程计算最优移动方案时,A柱、B柱、C柱的使用次数。

    Input

    输入由多组测试数据组成。每组测试数据的第1 行是给定的正整数n。

    Output

    对应每组输入,输出的每一行由三个相互空格的正整数组成,分别表示塔座A的使用次数、塔座B的使用次数及塔座C的使用次数。

    Sample Input

    2

    Sample Output

    0 2 1

    Source

    wangzhiqun

    [Submit]   [Go Back]   [Status]   [Discuss]

     

    //13219 wupanlei 1067 Accepted 892K 120MS G++ 0.72K 2009-06-23 21:07:31 
    #include <iostream>
    using namespace std;
    class Hanoi
    {
    private:
        
    int numA,numB,numC;
    public:
        Hanoi();
        
    void MoveHanoi(int num,char A,char B,char C);
        
    void Caluater(char ch1,char ch2);
        
    void Display();
    };
    Hanoi::Hanoi()
    {
        numA
    =0;
        numB
    =0;
        numC
    =0;
    }
    void Hanoi::Caluater(char ch1,char ch2)
    {
        
    if(ch2=='A')
            numA
    ++;
        
    else if(ch2=='B')
            numB
    ++;
        
    else
            numC
    ++;
    }
    void Hanoi::MoveHanoi(int num, char A, char B,char C)
    {
        
    if(num>0)
        {
            MoveHanoi(num
    -1,A,C,B);
            Caluater(A,B);
            MoveHanoi(num
    -1,C,B,A);
        }
    }
    void Hanoi::Display()
    {
        cout
    <<numA<<" "<<numB<<" "<<numC<<endl;
    }
    int main()
    {
        
    int nn;
        
    while(cin>>nn)
        {
            Hanoi h;
            h.MoveHanoi(nn,
    'A','B','C');
            h.Display();
        }
        
    return 0;
    }

     

  • 相关阅读:
    mysql-03
    mysql-02
    mysql-01
    RESTFUL设计风格
    mysql水平拆分和垂直拆分
    redis连环夺命问
    Python 的十大重要特性
    吊打--redis
    python2和3 的区别
    tornado第一段代码
  • 原文地址:https://www.cnblogs.com/forever4444/p/1509747.html
Copyright © 2011-2022 走看看