梵塔

梵塔

目录导航

基本内容

后来,这个传说就演变为汉诺塔游戏:

1.有三根杆子A,B,C。A杆上有若干碟子

2.每次移动一块碟子,小的只能叠在大的上面

3.把所有碟子从A杆全部移到C杆上

解决算法(C语言) /* Copyrighter by SS7E */

#include<stdio.h> /* Copyrighter by SS7E */

void hanoi(int n,char A,char B,char C) /* Copyrighter by SS7E */

{

if(n==1)

{

printf("Move disk %d from %c to %c\n",n,A,C);

}

else

{

hanoi(n-1,A,C,B); /* Copyrighter by SS7E */

printf("Move disk %d from %c to %c\n",n,A,C);

hanoi(n-1,B,A,C); /* Copyrighter by SS7E */

}

}

main() /* Copyrighter by SS7E */

{

int n;

printf("请输入数字n以解决n阶汉诺塔问题:\n");

scanf("%d",&n);

hanoi(n,'A','B','C');

}/* Copyrighter by SS7E */

如果按照最快的速度移动即不重复地移

想移动第二片金片则需要先移动第一片

想移动第三片金片则需要先移动第二片

.

.

.

想移动第64片需要先移动第63片

移动第一片需要1次

移动第二片需要3次(必须将第一片移到第二片上才能将第三片移下来)

移动第三片需要7次

移动第四片需要15次......

可以看出每想移动一片就需要将上边的所有片摞在一起

所以每移动一片都需要操作上一片次数的二倍+1(自己那片动)

所以由数列可知移动第n片需要2^n-1次

64片就需要2的64次方减1次

2的64次方...

已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子

从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上

不能出现大盘压小盘.找出移动次数最小的方案.

程序如下:

program fanta;

var

n:integer;

procedure move(n,a,b,c:integer);

begin

if n=1 then writeln(a,'--->',c)

else begin

move(n-1,a,c,b);

writeln(a,'--->',c);

move(n-1,b,a,c);

end;

end;

begin

write('Enter n=');

read(n);

move(n,1,2,3);

end.

的详细解析(pascal)

相关百科
返回顶部
产品求购 求购