• 洛谷 P1096 [NOIP2007 普及组] Hanoi 双塔问题


    [NOIP2007 普及组] Hanoi 双塔问题

    题目描述

    给定 A A A B B B C C C三根足够长的细柱,在 A A A柱上放有 2 n 2n 2n个中间有孔的圆盘,共有 n n n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为 n = 3 n=3 n=3的情形)。

    现要将这些圆盘移到 C C C柱上,在移动过程中可放在 B B B柱上暂存。要求:

    (1)每次只能移动一个圆盘;

    (2) A A A B B B C C C三根细柱上的圆盘都要保持上小下大的顺序;

    任务:设 A n A_n An 2 n 2n 2n个圆盘完成上述任务所需的最少移动次数,对于输入的 n n n,输出 A n A_n An

    输入格式

    一个正整数 n n n,表示在 A A A柱上放有 2 n 2n 2n个圆盘。

    输出格式

    一个正整数, 为完成上述任务所需的最少移动次数 A n A_n An

    样例 #1

    样例输入 #1

    1
    
    • 1

    样例输出 #1

    2
    
    • 1

    样例 #2

    样例输入 #2

    2
    
    • 1

    样例输出 #2

    6
    
    • 1

    提示

    【限制】

    对于 50 % 50\% 50%的数据, 1 ≤ n ≤ 25 1 \le n \le 25 1n25

    对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 200 1 \le n \le 200 1n200

    【提示】

    设法建立 A n A_n An A n − 1 A_{n-1} An1的递推关系式。

    分析:

    这个题直接套公式就行了:移动最少次数=2^(n+1)-2

    代码(伪):

    #include
    
    using namespace std;
    
    long long n;
    
    int main() 
    {
        cin>>n;
        
        long long s=pow(2,n+1);
        
        s-=2;
        
        cout<<s;
        
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    结果70分

    咋办呢???

    用 Python3 啊!!!

    我去学了亿下之后,终于把输入输出学废了。
    但是2的x次方怎么求呢?百度一下

    代码终于能写出来了~~~

    代码(真):

    n=int(input())//输入
    
    print(2**(n+1)-2)//直接输出
    
    • 1
    • 2
    • 3

    (原谅我不会注释)

    结束啦~~~

  • 相关阅读:
    从零打造“乞丐版” React(一)——从命令式编程到声明式编程
    30fps跳帧为20fps
    常见高级语言的输入与输出训练(一)
    C++头文件
    UE5如何实现语言本地化管理(中英文切换)
    关于异常的方方面面
    单核和多核中的多线程环境下,如何保证i++,++i执行的原子性。
    JDBC简介和快速入门
    网易企业邮箱免费版管理员密码忘记的三大找回方式
    双冒号 :: 方法引用 ( Java 8新特性 )
  • 原文地址:https://blog.csdn.net/m0_66603329/article/details/126411530