这类题目就是纸上模拟,找规律。
问题描述:在一块铜板上有三根杆,目的是将最左边杆上的盘全部移到右边的杆上,条件是不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面
问:现在有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);
代码:
#includeusing namespace std; int main() { int n; while(cin>>n) { long long sum=1; for(int i=0;i ) sum=sum*3; sum=sum-1; cout< endl; } }