首页 > 其他 > 详细

汉诺塔问题hdu 2065——找规律

时间:2019-03-02 13:14:12      阅读:192      评论:0      收藏:0      [点我收藏+]

这类题目就是纸上模拟,找规律

问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面

问:现在有N个圆盘,她至少多少次移动才能把这些圆盘从最左边移到最右边? 

纸上模拟:模拟之后发现将圆盘从左移动到中间的次数=从中间移到右边=1/2从左边移到右边次数

f(n)表示至少n次移动才能把这些圆盘从最左边移到中间    a(n)表示第n个圆盘移动的次数

当n=1时,f(1)=1    a(1)=1

当n=2时,f(2)=4     a(1)=3   a(2)=1

当n=3时,f(3)=13    a(1)=9   a(2)=3   a(3)=1

规律:a(n)呈现以3为公比的等比数列,f(n)为等比数列的和

所以:从左边移到中间需:s(n)=(3^n-1)/2;

从左边移到右边需:s(n)=(3^n-1);

代码:

技术分享图片
#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        long long sum=1;
        for(int i=0;i<n;i++)
        sum=sum*3;
        sum=sum-1;
        cout<<sum<<endl;
     } 
}
View Code

 

汉诺塔问题hdu 2065——找规律

原文:https://www.cnblogs.com/Aiahtwo/p/10460535.html

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