3塔汉诺塔

# 题意

# 题解
1) n个在a柱,先通过c将n-1移到b柱上
2) 将最大的一个移动到c柱子
3) 再通过a柱将n-1个从b移动到c
4) 初始将一个移动到另一个所需要的步数为1
5) 移动n个盘子所需要的移动次数:2^n-1

# 递归

#include<bits/stdc++.h>
using namespace std;
void move (int m,char a,char b,char c)
{
    if(m==1)
    {
        printf("Move disk %d from %c to %c\n",m,a,c);
    }
    else{
        move(m-1,a,c,b);
        printf("Move disk %d from %c to %c\n",m,a,c);
        move(m-1,b,a,c);
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    move (n,'A','B','C');
    return 0;
}

# 递推

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int f[N];
int main(){
    int n;
    cin>>n;
    f[1]=1;
    for(int i=2;i<=n;i++)
        f[i]=f[i-1]*2+1;
    cout<<f[n];
}

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12416432.html