zoukankan      html  css  js  c++  java
  • HDU 2077

    Problem Description
    还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。
     
    Input
    输入数据的第一行是一个数据T,表示有T组数据。
    每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。
     
    Output
    对于每组输入数据,最少需要的摆放次数。
     
    Sample Input
    2 1 10
     
    Sample Output
    2 19684
     
    该题是汉诺塔III 的改版,该题的模拟步骤如下:
    (1) n-2 个盘子从A移动到C   2步
    (2) 第n-1个盘子从A移动到B 1步
    (3) 第n个盘子从A移动到B    1步
    (4) n-2个盘子从C移动到A    2步
    (5) 第n个盘子从B移动到C    1步
    (6) 第n-1个盘子从B移动到C 1步
    (7) n-2个盘子从A移动到C    2步
     
    1,4,7步就是模拟汉诺塔III的走法,其最小步数为g(n)=3^n-1
    然后有三次,g(n)*3
    2,3,5,6 是固定步数总共为4,
    所以该方程为Hanoi[n] = 3*g(n)+4;
     
    代码如下:
    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
        long long int Hanoi[25];
        int i,n,t;
        Hanoi[2] = 4;
        Hanoi[1] = 2;
        for(i = 3;i <= 20;i ++)
        {
            Hanoi[i] = 3*(pow(3,i-2)-1) + 4;
        }
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            printf("%I64d
    ",Hanoi[n]);
        }
        return 0;
    }
    Hanoi
  • 相关阅读:
    hanlp在jdk11 maven8编译后在jdk8 报错
    Linux top命令输出到文件——持续输出某个进程的信息
    maven with depend
    解决mount时发生错误wrong fs type, bad option, bad superblock
    leetcode中 01背包问题相关汇总
    leetcode刷题总结901-950
    Xgboost如何处理缺失值/
    leetcode刷题总结851-900
    leetcode刷题总结801-850
    leetcode刷题总结751-800
  • 原文地址:https://www.cnblogs.com/52Cassie/p/4945612.html
Copyright © 2011-2022 走看看