zoukankan      html  css  js  c++  java
  • 5I

    还记得汉诺塔III吗?他的规则是这样的:不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到小盘的上面。xhd在想如果我们允许最大的盘子放到最上面会怎么样呢?(只允许最大的放在最上面)当然最后需要的结果是盘子从小到大排在最右边。 

    Input

    输入数据的第一行是一个数据T,表示有T组数据。 
    每组数据有一个正整数n(1 <= n <= 20),表示有n个盘子。 

    Output

    对于每组输入数据,最少需要的摆放次数。 

    Sample Input

    2
    1
    10

    Sample Output

    2
    19684

    // 几乎能独立写出来了
     1 #include<stdio.h>
     2 /*    从左到右分别记柱子为a,b,c.
     3     #1将前n-1个盘子从a移到b.
     4     将第n个盘子从a移到b,再从b移到c.
     5     将前n-1个盘子从b移到c.
     6     则g(n)=2*f(n-1)+2.
     7     #2将前n-1个盘子从a移到b,再从b移到c.
     8     将第n个盘子从a移到b.
     9     将前n-1个盘子从c移到b.
    10     则f(n)=3*f(n-1)+1.
    11 */
    12 int f[21]={0};
    13 void table()
    14 {
    15     for(int i=1;i<21;i++)
    16         f[i]=3*f[i-1]+1;
    17 }
    18 int main()
    19 {
    20     int t,n;
    21     table();
    22     scanf("%d", &t);
    23     while(t--)
    24     {
    25         scanf("%d", &n);
    26         printf("%d
    ", 2*f[n-1]+2);
    27     }
    28     return 0;
    29 } 
    View Code
  • 相关阅读:
    JVM与Dalvik
    3G技术
    Android开发环境的搭建
    Android学习杂记
    JDK环境变量配置
    签名Android应用程序
    Android中Hardcoding String ……,should use @string/警告的处理
    命令行创建Android项目
    ElasticSearch为什么这么快
    多线程1--基础知识
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10355816.html
Copyright © 2011-2022 走看看