zoukankan      html  css  js  c++  java
  • 九度oj 题目1458:汉诺塔III

    题目描述:

    约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面。Daisy已经做过原来的汉诺塔问题和汉诺塔II,但碰到这个问题时,她想了很久都不能解决,现在请你帮助她。现在有N个圆盘,她至少多少次移动才能把这些圆盘从最左边移到最右边?

    输入:

    包含多组数据,每次输入一个N值(1<=N=35)。

    输出:

    对于每组数据,输出移动最小的次数。

    样例输入:
    1
    3
    12
    
    样例输出:
    2
    26
    531440
    

    先把n-1块挪到3上,再把第n块移到2上,再把n-1块挪到1上,再把n块移到3上,再把n-1块挪到3上
    代码如下
     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <queue>
     5 #include <algorithm>
     6 using namespace std;
     7 typedef long long ll;
     8 
     9 ll dp[40];
    10 int n;
    11 
    12 int main(int argc, char const *argv[])
    13 {
    14     dp[1] = 2;
    15     for (int i = 2; i <= 35; i++) {
    16         dp[i] = 3 * dp[i - 1] + 2;
    17     }
    18     while (scanf("%d", &n) != EOF) {
    19         printf("%lld
    ", dp[n]);
    20     }
    21         
    22     return 0;
    23 }
  • 相关阅读:
    echarts .NET类库开源
    公司笔试题
    ASP.NET Word/Excel 权限问题
    ASP.NET XmlSerializer权限问题
    jQuery Ajax 处理 HttpStatus
    C#调用百度静态地图
    .NET和F#周报第35周-.NET 8月重大更新
    F#.NET周报 2018第34周-Ionide下载量100万
    字符串切分
    最近很火的一首小诗 You are in your TIME ZONE
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5874473.html
Copyright © 2011-2022 走看看