GitHub

四柱汉诺塔 1559

题目描述

“汉诺塔”,是一个众所周知的古老游戏。现在我们把问题稍微改变一下:如果一共有4根柱子,而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢? 为了编程方便,只需要输出这个结果除以10000的余数。

输入描述

该题含有多组测试数据,每组一个正整数n。(0<n<=50000)

输出描述

一个正整数,表示把n个盘子从第1根柱子移动到第4根柱子需要的最少移动次数mod 10000的值。

样例输入

15

样例输出

129

 

 1 #include <iostream>
 2 using namespace std;
 3 int main(){
 4     int n;
 5     while(cin>>n){
 6         unsigned long long m[50001];
 7         int i,j,a=0,b=2,s=2;
 8         m[1]=1;
 9         for(i=2;i<50001;i++){
10             m[i]=m[i-1]+s;
11             m[i]=m[i]%10000;
12             a=a+1;
13             if(a==b){
14                 s=s*2;
15                 s=s%10000;
16                 b++;
17                 a=0;
18             }
19         }
20         cout<<m[n]<<endl;
21     }
22 } 
zz

 

posted @ 2019-08-09 20:07  繁华似锦觅安宁  阅读(552)  评论(0编辑  收藏  举报