新闻资讯
看你所看,想你所想

梵塔(着名智力游戏)

梵塔(着名智力游戏)

梵塔(着名智力游戏)

梵塔是一款着名的智力游戏。

后来,这个传说就演变为汉诺塔游戏:
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)

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com