• 九度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 }
  • 相关阅读:
    在线合并多个Excel
    http3了解
    LPC55S16的Classical CAN 测试
    LPC55xx:DCDC供电电路分析及检测方法
    LPC55xx+PAJ7620手势传感器实现USB PPT翻页器
    使用I.MXRT单芯片配置双路以太网
    RT1052同时开两路ADC要怎么做
    基于LwIP实现在一个网口上同时支持IPv6+IPv4通信
    RT1010SDK上手I2C,GXHT30温湿度传感器
    i.MX RT1050 ADC2调试工作总结
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5874473.html
Copyright © 2020-2023  润新知