关闭

NYOJ 88:汉诺塔(一)【数学】

标签: NYOJ高精度秦九韶算法
297人阅读 评论(0) 收藏 举报
分类:

汉诺塔(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

现在请你计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求你算出结果的十进制位最后六位)

输入
第一行是一个整数N表示测试数据的组数(0<N<20)
每组测试数据的第一行是一个整数m,表示起始时金片的个数。(0<m<1000000000)
输出
输出把金片起始针上全部移动到另外一个针上需要移动的最少步数的十进制表示的最后六位。
样例输入
2
1
1000
样例输出
1
69375
设金片数量为n时所需要的步骤为F(n),则易得递推式F(n) = 2F(n-1) + 1;  易推得F(n) = 2^n - 1;
AC-code:
#include<cstdio>
#define mod 1000000
long long pow(int n)
{
	if(n==1)
		return 2;
	long long t=pow(n/2)%mod;
	t=t*t%mod;
	if(n&1) //若n为奇数,则n个2相乘,等于前n/2个2相乘的平方再乘以2
		return 2*t%mod;
	else//若n为偶数,则n个2相乘,等于前n/2个2相乘的平方
		return t;
}
int main()
{
	int t,n;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		printf("%d\n",pow(n)-1);
	}
	return 0;
}


0
0
查看评论

nyoj 88 汉诺塔(一)

汉诺塔(一) 时间限制:1000 ms  |           内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2015-03-28 10:26
  • 635

nyoj 88 汉诺塔(一)

点击打开链接 汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的...
  • a27985649
  • a27985649
  • 2013-08-11 23:35
  • 607

NYOJ 88 汉诺塔(一)

原题链接 设金片数量为n时所需要的步骤为F(n),则易得递推式F(n) = 2F(n-1) + 1;  易推得F(n) = 2^n - 1; 但是一般的累乘容易超时,这题需要一个时间消耗为O(log n)的算法。 附ac代码: #include #define mod 10000...
  • u012846486
  • u012846486
  • 2014-02-12 12:45
  • 718

NYOJ 88 汉诺塔(一)

描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根...
  • u014730404
  • u014730404
  • 2014-04-15 18:50
  • 248

nyoj 88 汉诺塔一

一直比较纠结汉诺塔具体怎么移动的,今天终于鼓足勇气查了一下。。。。 算法介绍: 其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者(那是中国学者不屑于发现。。。)发现一种出人意料的简单方法,只要轮流进行两步操作就可...
  • H_R_D_127
  • H_R_D_127
  • 2012-03-31 16:56
  • 2932

NYOJ 题目88 汉诺塔(一)

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在...
  • u014492513
  • u014492513
  • 2014-10-31 12:16
  • 420

nyoj 88 汉诺塔

汉诺塔就是层叠递归调用的典型例子,一直是利用A—>B  A-->C  B-->C这样的单个步骤。        具体来说,当盘数大于一时,不违背原则下(过程中总是大在下小的在上),A先借助B再放到C上...
  • u010801915
  • u010801915
  • 2013-11-20 20:37
  • 575

nyoj 88汉诺塔_1

01./* 02.现在请你计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求你算出结果的十进制位最后六位) 03.  04.输入 05.第一行是一个整数N表示测试数据的组数(0 06.每组测试数据的第一行是一个整数m,...
  • a164227826
  • a164227826
  • 2016-07-26 08:41
  • 92

NYOJ 汉诺塔(一)南工88

题目链接:here~~ 规律:fn=2^n-1,二分法求2^n。 #include #include #define N 1000000 using namespace std; int pow(long long m) { long long sum=1, a=2; whi...
  • liu_yutao
  • liu_yutao
  • 2013-04-24 08:03
  • 748

汉诺塔(一 )解法集合 (主要用快速幂)

汉诺塔(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大...
  • qq_31975227
  • qq_31975227
  • 2016-07-22 11:25
  • 791
    个人资料
    • 访问:143619次
    • 积分:4773
    • 等级:
    • 排名:第7192名
    • 原创:346篇
    • 转载:1篇
    • 译文:0篇
    • 评论:37条
    最新评论