zoukankan      html  css  js  c++  java
  • HDUOJ--汉诺塔II

    汉诺塔II

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3675    Accepted Submission(s): 1830

    Problem Description
    经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。    Gardon是个怕麻烦的人(恩,就是爱偷懒的人),很显然将64个圆盘逐一搬动直到所有的盘子都到达第三个柱子上很困难,所以Gardon决定作个小弊,他又找来了一根一模一样的柱子,通过这个柱子来更快的把所有的盘子移到第三个柱子上。下面的问题就是:当Gardon在一次游戏中使用了N个盘子时,他需要多少次移动才能把他们都移到第三个柱子上?很显然,在没有第四个柱子时,问题的解是2^N-1,但现在有了这个柱子的帮助,又该是多少呢?
     

     

    Input
    包含多组数据,每个数据一行,是盘子的数目N(1<=N<=64)。
     

     

    Output
    对于每组数据,输出一个数,到达目标需要的最少的移动数。
     

     

    Sample Input
    1
    3
    12
     

     

    Sample Output
    1
    5
    81
     

     

    Author
    Gardon
     

     

    Source
     

     

    Recommend
    JGShining
    /

    *#include<stdio.h>

    #include<math.h>
    int main()
    {
        long a[65];
        a[1]=1;
    long i,j,n,m,r;
        for(i=2,j=1,r=1,m=2;i<66;i++,j++)
            if(j<=m)
                a[i]=a[i-1]+pow(2,r);
            else
    {
                m++;
                j=1;
                r++;
                a[i]=a[i-1]+pow(2,r);
            }
        while(scanf("%d",&n)==1){
            printf("%d ",a[n]);
        }
    return 0;
    }*/
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    const int maxn=64;
    int arr[maxn];
    void func();
    int main()
    {
    int n;
    func();
       while(cin>>n)
      cout<<arr[n-1]<<endl;
         return 0;
    }
    void func()
    {
    int i,j,k,m;
        memset(arr,0,sizeof(arr));
         k=*arr=1;
           m=2;
        for(i=1,j=0;i<maxn;i++,j++)
    arr[j>=m?m++,j=0,k++:NULL,i]=arr[i-1]+(1<<k);
     
    }
     
    你看不到,你卡不到
  • 相关阅读:
    VS GIT 使用入门---我只是搬运工
    虚拟机安装_1_wincc_matriton
    程序设计入门—Java语言 第六周编程题 1 单词长度(4分)
    程序设计入门—Java语言 第五周编程题 2井字棋(5分)
    JAVA入门 第五周 1多项式
    第四周编程作业 2念整数
    第四周编程作业 1素数和(5分)
    第3周作业第2题 数字和特征
    第3周作业第1题 奇偶个数
    第2周作业第2题信号报告
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3192377.html
Copyright © 2011-2022 走看看