首页 > 其他 > 详细

hdu 2064汉诺塔III 递推

时间:2014-03-02 14:49:33      阅读:481      评论:0      收藏:0      [点我收藏+]

汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动。

分析:

第1步:初始状态;

第2步:把上面的n-1个盘移到第3号杆上;

 

第3步:把第n个盘从1移到2;

第4步:把前n-1个从3移到1,给第个盘让路;

第5步:把第n个盘从2移到3;

第6步:把前n-1个从移到3,完成移动;

我们设f(n)为把n个盘从1移到3所需要的步数,当然也等于从3移到1的步数。
看什么的图就知道,要想把第n个盘从1移到3,需要想把前n-1个从1移动3,再从3->1最后再1->3。
而第n个盘要从1->2->3经历2步。
∴f(n) = 3 × f(n-1) + 2;
  f(1) = 2;

bubuko.com,布布扣
#include<stdio.h>
int main()
{
    __int64 f[36],n,i;
    f[1]=2;
    for(i=2;i<=35;i++)
        f[i]=3*f[i-1]+2;
    while(scanf("%I64d",&n)!=EOF)
        printf("%I64d\n",f[n]);
    return 0;
}
bubuko.com,布布扣

hdu 2064汉诺塔III 递推,布布扣,bubuko.com

hdu 2064汉诺塔III 递推

原文:http://www.cnblogs.com/xtaq/p/3575447.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!