zoukankan      html  css  js  c++  java
  • 杭电2077

    哎,说实话Hanio塔这样的题,要是思路不对,真是干着急啊!就是无法ac,哎!
    对了,此题的解题思路可以参考杭电2064,依然是递推的问题!!
    对比杭电2064,此题附加了一个规则,就是允许最大的一个盘子放到其他盘子的的上面,
    首先这样考虑:
    1)把最左边的1号杆上的n-1个盘子移到2号中间的杆上;    //移动次数f(n-1)
    2)把最左边第n个盘子(即最大的盘子从1号移动到2号,再从2号移动到3号);//移动次数2
    3)再把2号杆上的n-1个盘子移动到3号杆上;//移动次数f(n-1);
     总的移动次数等于f(n-1)+f(n-1)+2=2*f(n-1)+2;
    接着,对于n前面的n-1个盘子的移动就符合以前的规律了,例如将n-2个盘子
    首先按规则从1号盘移动到2号盘,在移动到3号盘,此时将第n-1号盘从1号杆子上移动到2好杆子上 这样
    就完成了把n-1个盘子从一号杆子移动到2号杆子上的任务。
    移动次数=3*f(n-1)+1;其余的以此类推!!
    说到这里了,你可以ac了吗?呵呵呵!!!


    ***对于递归调用的简单讲解请参考本人的:
    http://www.cnblogs.com/xiohao/archive/2012/10/15/2724965.html
    #include<iostream>
    using namespace std;
    int main()
    {
     int T,n;
     int f(int m);
     cin>>T;
     getchar();
     while(T--)
     {
      cin>>n;
      if(n==1)
       cout<<2<<endl;
      else
      printf("%d\n",2*f(n-1)+2);
     }
     return 0;
    }


     int f(int m)
     {
      if(m==1)
       return 1;
      else
       return  3*f(m-1)+1;
     }

  • 相关阅读:
    7.1MongoDB之索引
    7.1MongoDB之排序
    6.30MongoDB之Limit与Skip方法
    6.30Java连接MongoDB进行操作练习
    6.30MongoDB之$type操作符
    6.30MongoDB之条件操作符
    6.30MongoDB之"查"
    6.29MongoDB之"改"
    c# 调用jar包
    sql server SQL 调试:无法启动 T-SQL 调试。未能附加到 SQL Server 进程
  • 原文地址:https://www.cnblogs.com/xiohao/p/2736214.html
Copyright © 2011-2022 走看看