1、史上最難智力游戲漢諾塔
問題能描述清楚點嗎
可以用遞歸的方法解決
A B C
三根柱子,將A上的n個盤移到C上分三步走:
將n-1個盤移到B
將第n個盤移到C
將n-1個盤從A移到C
那麼n-1個盤怎麼移動呢,就用用遞歸的方法一層層移動即可,編程很容易實現的。
2、5層漢諾塔游戲31步怎麼移到另一個柱子上
5層漢諾塔游戲弄好四層後,先把上面的四個藉助第三根柱子移到第二根柱子上,再把剩下的一個移到第三根柱子上,最後藉助第一根柱子將第二根柱子上的移到第三根柱子上去。
漢諾塔,又稱河內塔,是一款WP7平台上源於印度一個古老傳說的益智類游戲。
漢諾塔:傳說上帝創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上安大小順序摞著64片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
3、c語言 模擬漢諾塔游戲的解法
寫一個函數用遞歸實現
用char代表盤子,ABC代表裝盤子的平台
最終將A上所有盤子移到C上
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
move(A, C); //只有一個盤子,把它從A移到C上
} else {
hanoi(n-1,A,C,B);//將A上n-1個盤子移到B上
move(A,C); //只有一個盤子,把A移到C上
hanoi(n-1,B,A,C);//將B上的盤子移到C上
}
}
4、漢諾塔游戲4個要幾次,5、6個呢?
n個漢諾至少要 (2的n次方)-1 次
所以4個要15次,5個31次,6個63次
5、七層的漢諾塔游戲最少幾步完成?
漢諾塔移動時,三個盤子要移動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步
6、漢諾塔游戲的程序設計和具體的程序
本人有個用易語言編寫的實例,很直觀。要的話可以發給你,不過你得安裝易語言程序,頂一下國產編程軟體吧,這款編程工具也不差的,用了就知道。
http://www.dywt.com.cn/vbs/index.asp
7、如何做一個C語言編程的漢諾塔游戲?要有源代碼。
#include<stdio.h>
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hanoi(int n,char one ,char two,char three)
{
if(n==1) move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
main()
{
int m;
printf("input the number of disks:");
scanf("%d",&m);
printf("the step to moving %3d diskes:\n",m);
hanoi(m,'A','B','C');
}
演算法介紹:
其實演算法非常簡單,當盤子的個數為n時,移動的次數應等於2^n – 1(有興趣的可以自己證明試試看)。後來一位美國學者發現一種出人意料的簡單方法,只要輪流進行兩步操作就可以了。首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上,根據圓盤的數量確定柱子的排放順序:若n為偶數,按順時針方向依次擺放 A B C;
若n為奇數,按順時針方向依次擺放 A C B。
(1)按順時針方向把圓盤1從現在的柱子移動到下一根柱子,即當n為偶數時,若圓盤1在柱子A,則把它移動到B;若圓盤1在柱子B,則把它移動到C;若圓盤1在柱子C,則把它移動到A。
(2)接著,把另外兩根柱子上可以移動的圓盤移動到新的柱子上。即把非空柱子上的圓盤移動到空柱子上,當兩根柱子都非空時,移動較小的圓盤。這一步沒有明確規定移動哪個圓盤,你可能以為會有多種可能性,其實不然,可實施的行動是唯一的。
(3)反復進行(1)(2)操作,最後就能按規定完成漢諾塔的移動。
所以結果非常簡單,就是按照移動規則向一個方向移動金片:
如3階漢諾塔的移動:A→C,A→B,C→B,A→C,B→A,B→C,A→C
漢諾塔問題也是程序設計中的經典遞歸問題,下面我們將給出遞歸和非遞歸的不同實現源代碼。
8、用才c++編程漢諾塔游戲
參考一下VC知識庫的文章,也可以去CSDN下載
http://www.vckbase.com/document/viewdoc/?id=1784
9、漢諾塔游戲記錄
#include <stdio.h>
#include <string.h>
void hanoi(int n,char a,char b,char c)
{
if(n==1) printf("%c->%c\n",a,c);
else
{
hanoi(n-1,a,c,b);
printf("%c->%c\n",a,c);
hanoi(n-1,b,a,c);
}
}
void main()
{
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
}