HDU2064 汉诺塔III 递推做法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Neo_kh/article/details/81252624

HDU2064 汉诺塔III

很郁闷,以前会做的汉诺塔问题居然一开始没想出来,好记性不如烂笔头,今日把这道题目记下来,方便以后查阅
( ・◡・)
这道题目和经典汉诺塔问题还不太一样,原题链接在此:HDU2064 不过题目再怎么变,思路还是一样的。
汉诺塔问题重点在于找到递推式,分析思路即模拟搬圆盘的过程,设step[i]为搬动第i个圆盘需要的最小步数。思路如下:

  • 首先将 i-1 个圆盘移动到最右边柱子上
  • 然后第 i 个圆盘移到中间
  • i-1 个圆盘再移动到最左边的柱子上
  • i 圆盘移动到最右边柱子上
  • 最后将i-1个圆盘移动到最右边的柱子上

由上述过程可得递推式:
step[i]=step[i-1]+1+step[i-1]+1+step[i-1]=3step[i-1]+2


实现代码

#include<cstdio>
using namespace std;
int main(){
    int n,i;
    long long step[35];
    step[0]=2;
    for(i=1;i<35;i++){
        step[i]=3*step[i-1]+2;
    }
    while(scanf("%d",&n)!=EOF){
        printf("%lld\n",step[n-1]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Neo_kh/article/details/81252624
今日推荐