汉诺塔

题号: 10091
时限:1000ms
限制内存:32768KB
题目: 汉诺塔

描述

汉诺塔是根据一个印度传说形成的数学问题:有三根杆子A, B, C. A杆上有n个穿孔圆盘, 盘的尺寸由下到上依次变小. 要求按照下列规则将所有圆盘移至C杆:
1. 每次只能移动一个圆盘
2. 大盘不能叠在小盘上面
找出最少需要移动多少次, 并打印移动的方案.
输入格式

一个整数n(1<=n<=15), 表示A杆最初有多少个圆盘.
输出格式

第一行, 输出最少移动的次数.
以下每行分别打印一次移动(例如, 移动A杆最上面的圆盘到C杆, 则输出"Move A to C").
输入样例

3
输出样例

7
Move A to C
Move A to B
Move C to B
Move A to C
Move B to A
Move B to C
Move A to C
题目来源
#include
#include 
#include
using namespace std;
void hanio(int n,char A,char B,char C)
{
    //代表将n个盘子分治地从A移到C上,B做辅助柱子。
    if(n==1)//n为1可以直接解决 
    cout<<"Move "<" to "<else{
        hanio(n-1,A,C,B);//分治处理n-1个盘子,从A移动到B上,C为辅助柱子 
        //cout<"<
        cout<<"Move "<" to "<1,B,A,C);//分治处理n-1个盘子,从B移动到C上,A为辅助柱子 
    }
 } 
int main()
{
    int n;
    cin>>n;
    cout<<pow(2,n)-1<'A','B','C'); 
    return 0;
}

你可能感兴趣的:(南阳理工oj-语言入门)