汉诺塔

二次信任 提交于 2020-02-04 11:22:31

汉诺塔递归

#include <bits/stdc++.h>
using namespace std;
int n;
/*
把 N- 1个从A经过C移动到B,最后一个从A到C
N- 1个在B上,经过A移动到C
*/
void hanuoti(int n,char A,char B,char C){
    if(!n)
        return;
    else{
        hanuoti(n - 1,A,C,B);
        //cnt++;记录移动的次数
        printf("Move disk %d from %c to %c\n",n,A,C);
        hanuoti(n - 1,B,A,C);
    }
}

int main(){
    scanf("%d",&n);
    hanuoti(n,'A','B','C');
    return 0;
}

用递归计算移动容易超时,
借助公式 2^n - 1
当数据太大时,公式无效,算不出大数
例如:
P760通天之汉诺塔

#include <bits/stdc++.h>
using namespace std;
int n;
stringstream b;
string c;
int main(){
    //freopen("out","w",stdout);
    cin >> n;
    b.precision(0);
    b << fixed << pow(2.0L,n);
    c = b.str();
    c[c.length() - 1]--;
    cout << c;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!