汉诺塔移动步数的计算

原创 2002年12月04日 08:57:00

        大家有没有试过计算汉诺塔的移动步数?是不是算了几天几夜也没有结果,而且还死机了……。现在本人找到了它的一个移动规律现与大家分享。

        汉诺塔移动时,三个盘子要移动7步,这是固定的。当四个盘子时,它先要把最上面的三个盘子移动到另外一根针上(这时移动了7步),然后把第四个盘子移动到另一根针上(这时共移动了8步,三个盘子的7步加上第四个盘子的1步),最后再把那三个盘子移动到第四个盘子上面(又是7步),所以,四个盘子要移动15步。五个盘子也是同样,我们知道了四个盘子的移动步数是15步,那么5个盘子就是15+1+15等于31步。由此得出结论:每增加一个盘子,它的移动步数就增加原来步数的一倍加1。如:我们已经知道5个盘子移动31步,那么,6盘子就是31*2+1=63步。

可编写C程序为:

#include<stdio.h>

void main(){

long double j=7;                   /*j用来记录盘子的移动步数,因为最少为三个盘子,所                                         以定义初值为7*/

int i;             /*i用来存放盘子的个数*/

printf("请输入一个大于等于3,小于等于64的数:");

scanf("%d",&i);

if(i>64&&i<3){

      printf("无法计算");}

else{

      for(x=3;x<i;x++)

            j=j*2+1;}      /*计算移动步数的公式*/

printf("%d个盘子要移动%.0lf步",i,j);}

这样算起来是不是简单了很多?以上程序由于long double数据类型的精度问题最多只能算到53个盘子的移动步数。

由以上公式得出64个盘子的移动步数为:18446744073709551615步

汉诺塔步数计算

/*汉诺塔移动时,三个盘子要移动7步,这是固定的。当四个盘子时,它先要把最上面的三个 盘子移动到另外一根针上(这时移动了7步),然后把第四个盘子移动到另一根针上(这时共 移动了8步,三个盘子的7步加上...
  • lordly_cm
  • lordly_cm
  • 2012年10月25日 11:40
  • 4882

用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C

用 递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,...
  • u011329762
  • u011329762
  • 2014年11月11日 18:31
  • 7165

递归经典案例汉诺塔 python实现

最近在廖雪峰大神的教程学习python  学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎...
  • hikobe8
  • hikobe8
  • 2016年01月07日 22:53
  • 24418

汉诺塔递归算法理解及实现

汉诺塔:(Hanoi)是一种玩具,如图: ![这里写图片描述] (http://img.blog.csdn.net/20150430225337439) 从左到右 A B C 柱 大盘子在...
  • u010177286
  • u010177286
  • 2015年05月01日 00:22
  • 7599

C语言计算汉诺塔最小移动步数(一)

效果图: /************************************** * 目的:用来计算汉诺塔移动的次数 * 原理:找规律,如三层是7,四层是7*2+1=15,五层是15...
  • odaynot
  • odaynot
  • 2012年10月27日 09:40
  • 6368

uva10795 - A Different Task 汉诺塔 给出状态问步数

A Different Task  The (Three peg) Tower of Hanoi problem is a popular one in computer scienc...
  • corncsd
  • corncsd
  • 2014年01月29日 19:22
  • 377

移动臂算法(可计算移动步数)

  • 2009年05月17日 17:39
  • 7KB
  • 下载

昨天学习了汉诺塔递归,写了个显示移动的过程吧

早上突然想到就写了 心血来潮 写的比较垃圾 就随手一写 大家看看就好 别喷哈  嘿嘿  using namespace std; int *a, *b, *c; void Show(int* a,...
  • xjay_cc
  • xjay_cc
  • 2015年11月09日 07:28
  • 377

汉诺塔计数 实现输出64个圆盘移动多少次 java代码

/**  * 因为汉罗塔的个数如果为1,2,3,4;那么对应的移动次数为1,3,7,15相当于2^n-1,也可以说是上一次的结果乘以2加上1就是下一次的结果  * 由于当汉罗塔多了之后后面的数字会很大...
  • Aronhu
  • Aronhu
  • 2014年03月18日 13:53
  • 727

C++学习:任意合法状态下汉诺塔的移动

汉诺塔问题:   问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆...
  • scorpion_zs
  • scorpion_zs
  • 2015年08月17日 22:33
  • 213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汉诺塔移动步数的计算
举报原因:
原因补充:

(最多只允许输入30个字)