梵塔(著名智力遊戲)

梵塔(著名智力遊戲)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

梵塔是一款著名的智力遊戲。

後來,這個傳說就演變為漢諾塔遊戲:
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)

相關詞條

熱門詞條

聯絡我們