在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵 天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金 片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消 灭,而梵塔、庙宇和众生也都将同归于尽。
现在请你计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求你算出结果的十进制位最后六位)
2 1 1000
1 69375
1 2 #include<iostream> 3 #include<cstdio> 4 #include<algorithm> 5 #include<string.h> 6 const int MAX = 100010 ; 7 int a[MAX]; 8 int main() 9 { 10 int T; 11 a[1]=1; 12 for(int i=2;i<MAX;i++) 13 a[i]=(2*a[i-1]+1)%1000000; 14 scanf("%d",&T); 15 while(T--) 16 { 17 int m; 18 scanf("%d",&m); 19 if(m>100005) 20 { 21 if(m%100000<6) 22 m=100000+m%10; 23 else 24 m%=100000; 25 } 26 printf("%d\n",a[m]); 27 } 28 return 0; 29 } 30
原文:http://www.cnblogs.com/caterpillarofharvard/p/4230565.html