“汉诺塔”,是一个众所周知的古老游戏。现在我们把问题稍微改变一下:如果一共有4根柱子,而不是3根,那么至少需要移动盘子多少次,才能把所有的盘子从第1根柱子移动到第4根柱子上呢?
为了编程方便,您只需要输出这个结果mod 10000的值。
Input
该题含有多组测试数据,每组一个正整数n。(0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<iomanip>
#include<functional>
#include<string>
using namespace std;
#define ll long long int
#define INF 0x3f3f3f3f
const int maxn = 1e5 + 10;
int a[50005];
int main()
{
int n; int cs; cs = 1;
int k, cnt, tmp;
while (~scanf("%d", &n))
{
cs = 1;
/*a[1] = 3;
a[2] = 10;
for (int i = 3; i <= n; i++)
{
a[i] = (a[i-1]+7+2*a[i-2]) % 10000;
}
cout << a[n] << endl;*/
k = 0; cnt = 0; tmp = 1;
for (int i = cs; i <= n; i++)
{
a[i] = a[i - 1] % 10000 + tmp % 10000;
cnt++;
if (cnt == k + 1)
{
tmp = tmp * 2 % 10000;
cnt = 0;
k++;
}
}
printf("%d\n", a[n] % 10000);
}
return 0;
}