求七块汉诺塔完成所需步骤(不要编程,只要步骤

2024-05-12 17:49

1. 求七块汉诺塔完成所需步骤(不要编程,只要步骤

七块汉诺塔完成所需步骤如下:用1到7表示七个汉诺塔圆盘,圆盘半径默认为1<2<3<4<5<6<7;以ABC表示汉诺塔的三个柱子,A为最左,B为中间,C为最右;
1—C表示把1号圆盘移动到第三个柱子上,以此类推:
一、1—C;2—B;1—B;3—C;1—A;2—C;1—C;4—B;1—B;2—A;
二、1—A;3—B;1—C;2—B;1—C;5—C;1—A;2—C;1—C;3—A;
三、1—B;2—A;1—A;4—C;1—C;2—B;1—B;3—C;1—A;2—C;
四、1—C;6—B;1—B;2—A;1—A;3—B;1—C;2—B;1—B;4—A;
五、1—A;2—C;1—C;3—A;1—B;2—A;1—A;5—C;1—C;2—B;
六、1—B;3—C;1—A;2—C;1—C;4—B;1—B;2—A;1—A;3—B;
七、1—C;2—B;1—B;7—C;1—A;2—C;1—C;3—A;1—B;2—A;
八、1—A;4—C;1—C;2—B;1—B;3—C;1—A;2—C;1—C;5—A;
九、1—B;2—A;1—A;3—B;1—C;2—B;1—B;4—A;1—A;2—C;
十、1—C;3—A;1—B;2—A;1—A;6—C;1—C;2—B;1—B;3—C;
十一、1—A;2—C;1—C;4—B;1—B;2—A;1—A;3—B;1—C;2—B;
十二、1—B;5—C;1—A;2—C;1—C;3—A;1—B;2—A;1—A;4—C;
十三、1—C;2—B;1—B;3—C;1—A;2—C;1—C;

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

求七块汉诺塔完成所需步骤(不要编程,只要步骤

2. 七层汉诺塔教程

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

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

3. 汉诺塔问题,为什么程序这样写,请解释一下

当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。
            当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。
            当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。
           当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。
          综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样(只是事件的复杂程度不一样)。
         
#include   
//第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔  
int i=1;//记录步数  
void move(int n,char from,char to) //将编号为n的盘子由from移动到to  
{printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,to);  
}  
void hanoi(int n,char from,char denpend_on,char to)
//将n个盘子,由初始塔,利用借用塔,移动到目标塔  
{  
    if (n==1)  
    move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地  
    else  
    {  
      hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上  
      move(n,from,to);              //将剩下的一个盘子移动到目的塔上  
      hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上  
    }  
}  
void main()  
{  
     printf("请输入盘子的个数:\n");  
     int n;  
     scanf("%d",&n);  
     char x='A',y='B',z='C';  
     printf("盘子移动情况如下:\n");  
     hanoi(n,x,y,z);  
}  

汉诺塔问题,为什么程序这样写,请解释一下

最新文章
热门文章
推荐阅读