一直比较纠结汉诺塔具体怎么移动的,今天终于鼓足勇气查了一下。。。。

算法介绍:
其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者(那是中国学者不屑于发现。。。)发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;
若n为奇数,按顺时针方向依次摆放 A C B。
(1)按顺时针方向把圆盘1从现在的柱子移动到下一根柱子,即当n为偶数时,若圆盘1在柱子A,则把它移动到B;若圆盘1在柱子B,则把它移动到C;若圆盘1在柱子C,则把它移动到A。
(2)接着,把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空柱子上的圆盘移动到空柱子上,当两根柱子都非空时,移动较小的圆盘。这一步没有明确规定移动哪个圆盘,你可能以为会有多种可能性,其实不然,可实施的行动是唯一的。
(3)反复进行(1)(2)操作,最后就能按规定完成汉诺塔的移动。

所以结果非常简单,就是按照移动规则向一个方向移动金片:
如3阶汉诺塔的移动:A→C,A→B,C→B,A→C,B→A,B→C,A→C

如4阶汉诺塔的移动:A-B   A-C  B-C  A-B C-A  C-B  A-B  A-C  B-C  B-A  C-A  B-C  A-B  A-C  B-C

n阶汉诺塔的移动次数为2^n-1;

对于本题目而言采用经典的递归和二分幂


#include <stdio.h>
#define p 1000000
long long f(long long x)
{long long t;if(x==1) return 2;if(x%2==0)//指数为偶数时{t=f(x/2)%p;return t*t%p;}if(x%2==1)//指数为奇数时{t=f(x/2)%p;return (t*t%p)*2%p;}
}int main()
{long long n,z,m;scanf("%lld",&n);while(n--){scanf("%lld",&m);z=(f(m)-1)%p;printf("%lld\n",z);}return 0;
}        

nyoj 88 汉诺塔一相关推荐

  1. NYOJ 88 汉诺塔(一)

    描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所 ...

  2. NYOJ 88 汉诺塔(一)

    原题链接 设金片数量为n时所需要的步骤为F(n),则易得递推式F(n) = 2F(n-1) + 1;  易推得F(n) = 2^n - 1; 但是一般的累乘容易超时,这题需要一个时间消耗为O(log ...

  3. NYOJ 93 汉诺塔 (数学)

    题目链接 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片 ...

  4. nyoj 汉诺塔(一)

    汉诺塔(一) 描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片 ...

  5. python turtle绘图-案例集锦(小猪佩奇、哆啦A梦、小黄人、樱花树、皮卡丘、汉诺塔、高达、星空等)

    1.小猪佩奇: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), &qu ...

  6. 汉诺塔问题——分治思想

    汉诺塔规则如下: 1.有三根相邻的柱子,标号为x,y,z. 2.x柱子上从下到上按金字塔状叠放着n个不同大小的圆盘. 3.现在把所有盘子一个一个移动到柱子z上,并且每次移动同一根柱子上都不能出现大盘子 ...

  7. 汉诺塔(三)_栈的应用

    问题 E: 汉诺塔(三) 时间限制: 3 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交][状态][讨论版] 题目描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北 ...

  8. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  9. Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

    1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s== ...

最新文章

  1. nagios插件之登陆防火墙实现session监控
  2. 【Java】全站编码过滤器GenericEncodingFilter代码与配置
  3. 路由器NAT网络地址转换
  4. SharePoint 2013 Workflow 状态栏失效
  5. 《剑指offer》c++版本 3.数组中重复的数字
  6. Ransomware CryptXXX Analysis
  7. IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的......
  8. l298n电机驱动模块_带DRV8825驱动器模块和Arduino的控制步进电机
  9. 多表查询返回多个DataTable,合并到一个Table中.
  10. [css] 有哪些方式可以对一个DOM设置它的CSS样式?
  11. go oracle编程,go基础编程(一):第一个go程序-hello word
  12. 3D版pix2pix来了,画一只猫就能抱起来吸丨github
  13. protobuf 微信小程序_微信小程序使用Protobuf
  14. JSF 的el表达式语言
  15. 021—转载-各种数据类型在16位、32位和64位系统下所占字节差异简介
  16. MacOS Catalina 关闭和开启文件安全性检查
  17. 每个月5千的工资不想干了想转行测试,软件测试薪资待遇怎么样?
  18. 年度规划复盘及一些收获
  19. 【行业介绍】工业自动化行业
  20. 半球展开图_新手入门如何学习钣金放样展开,老师傅分享篇(二)!

热门文章

  1. (四)Python--数据容器
  2. 学生管理系统(ZWH分享)
  3. 行为树 Behavior3go
  4. 中央音乐学院计算机考试模拟题,央院音基考试模拟题 考试注意事项 考前必看!...
  5. C++课程设计——停车场管理系统
  6. 台式电脑没鼠标怎么移动光标_电脑没有鼠标怎么操作?没有鼠标操控win10电脑的方法...
  7. 【音视频开发笔记】音视频基础
  8. python函数定义和调用练习_Python练习-函数(方法)的定义和应用
  9. 将视频流保存成wmv格式的文件
  10. 计算机毕设(附源码)JAVA-SSM泸定中学宿舍管理系统设计