1. 程式人生 > >關於漢諾塔的一點理解

關於漢諾塔的一點理解

以NEFU 200 為例

題意:

思路:

利用遞迴的思想解決很好懂

遞迴程式碼:

過程程式碼:

#include <iostream>


using namespace std;
long long steps,i=0;
int move(int x)
{
    i=!i;
    steps+=2;
    if(i)
    {
        cout<<"move 1 from A to B"<<endl;
        cout<<"move 1 from B to C"<<endl;
    }
    else
    {
        cout<<"move 1 from C to B"<<endl;
        cout<<"move 1 from B to A"<<endl;
    }
}
int mission(int x,char a,char b,char c)
{
    if(x==1)
    move(1);
    else
    {
        mission(x-1,a,b,c);
        steps++;
        cout<<"move "<<x<<" from "<<a<<" to "<<b<<endl;
        mission(x-1,c,b,a);
        steps++;
        cout<<"move "<<x<<" from "<<b<<" to "<<c<<endl;
        mission(x-1,a,b,c);
    }
}
int main()
{
    int n;
    while(cin>>n)
    {
        steps=0;
        mission(n,'A','B','C');
        cout<<"Total steps are "<<steps<<endl;
    }
}

計步程式碼:
#include <iostream>

using namespace std;

int main()
{
    int n;
    long long sum;
    while(cin>>n)
    {
        sum=2;
        for(int i=1;i<n;i++)
        sum=sum*3+2;
        cout<<sum<<endl;
    }
}