1樓:匿名使用者
漢諾塔問題的非遞迴非堆疊演算法(一)
#i nclude
#i nclude
#define maxno 10000
int step_d,step_s,no;//定義將要行進的步數void main()
//初始化完畢
if(fmod(no,2))else //判斷奇數盤的步數和偶數盤的步數
int from,to;
from=0;
to=step_s+from;
p[0]=&p[0][no];
while(*(p[0]) != *(p[1]))漢諾塔問題的非遞迴非堆疊演算法(二)
前一種方法的/*原理:
如果把三個柱子圍成一個環,盤子總數為n,其移動的規律是:
如果n為偶數:奇數號盤每次2步;偶數號盤每次1步;
如果n為奇數:奇數號盤每次1步;偶數號盤每次2步;
至於下一步該移動哪個柱子上的盤子,通過大小和順序即可判斷。
以上可以通過數學證明,不贅述!
2樓:匿名使用者
a、b、c 3根針,a針自下而上由大到小套了n個環,目標是將所有環藉助b或c移動到c或b,移動規則:一次一個環;大不壓小。
漢諾塔演算法
#include
void hanoi(int n, char x, char y, char z)
else
}void main()
{int n;
printf("input the height of the tower ...... \n");
scanf("%d",&n);
hanoi(n,'a','b','c');
3樓:tang屍三擺手
parcel::::::::::
program hanoi;
functionhanoi(x:integer):longint;
begin
if x=1 then hanoi:=1;
if x=2 then hanoi:=3;
else
begin
hanoi:=2*hanoi(x-1)+1;
end;
end;
begin
read(x)
write(hanoi(x));
end.
思想就是:第n個就等於第n-1個乘以2+1次
漢諾塔問題通項公式
4樓:章氏不錯
【1,2,3】這個遞迴編號相同的行,如果單拿出來,是ab,bc.ca,或ac.cb.ba的迴圈的。
,【1,2】這就是編號。這是人類智慧的洗資料結果。我發現地。。。圖是落櫻提供地。
這是直接產生移動指令的規律。不需要棧模擬。
漢諾塔移動步數 30
5樓:
n+1個盤子的移動步數==n個盤子的移動步數*2+1所以n個盤子最少要移動2^n-1,這道題和c++沒關係吧。
#include
#include
int main(void)
{int n;
while(std::cin>>n)
{std::cout<
6樓:螺旋絞肉機
用遞推式 , f[n]表示將n個柱子從一個盤子移動到另外一個盤子上,則f[n] = f[n - 1] + 1 + f[n - 1];
程式如下
#include
using namespace std;
int n;
int f[12345];
int main()
cout << f[n] << endl;
return 0;}
漢諾塔該怎麼玩,方法
7樓:匿名使用者
漢諾塔玩法如下:
遊戲裡有三根柱子,左邊的柱子上從下往上按照大小順序摞著n片圓盤。玩家需要做的是把圓盤從下面開始按從大順序重新擺放在右邊的柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
柱子:在一個平板底座上間隔一定距離有三根完全一樣的柱子1,2,3,柱子的長短決定於所移盤子的個數。
底座:長方體的木板,上有均勻的三個插孔。
8樓:勇者無畏
還學者!孩子二年級要學, 之前沒找著規律 ,下午研究了下,其實很簡單的!用最少步數多少層也能解!
只是時間而已!abc三個柱子: a柱移到b柱如果是奇數就是a1先移到b 如果是偶數就是a1先移到c(就是遇到偶數a1要隔一個柱子)!
如果移到c柱則反之(a1奇數隔偶數不隔)以次類推
9樓:匿名使用者
其實漢諾塔只要掌握規律,多少層都是一樣的。最重要的是第一塊放在哪兒,單數層的漢諾塔一定要放在第三柱,雙數層的要放在第二柱。如果你會六層的漢諾塔,(將第一塊放在第三柱),將六塊都移到第二柱,最後一塊移到第三柱,再如前法將上面六塊都移到第三柱。
就ok了。
10樓:以可心
遵循的原則是大的盤需要擺放在下面,小的擺在上面,一次只能拿一個,交替輪換著挪動圓盤。
11樓:裙子
這個關鍵要知道一個規律一單雙數。知道了這個規律你會節省步數,現在我可以弄到十四分鐘走完十層,靠的就是手速和這個規律。
12樓:匿名使用者
把所有環移動到最後一個
上面的環只能比下面的小才能放
技巧:移動奇數個環第一個先移動到目標位置,偶數環到另一個 漢諾塔的c語言實現
#include"stdio.h"
void move(char x,char y)void hanoi(int n,char one ,char two,char three)
}main()
13樓:張楓逸
汗諾塔遊戲,有三個柱子,分別為起始柱a,輔助柱b和目標柱c。
不管是多少層的遊戲,都可以使用這樣的規律。即最下面一層的圓圈要放到目標柱上,而上面一層的圓圈放在輔助柱上。
例如:一層的汗諾塔,直接放在目標柱a上;二層的汗諾塔,二層要放在目標柱c上,一層放在輔助柱b上,即先將一層放在輔助柱b上,將二層放在目標柱c上,再將一層放在目標柱c上;三層的汗諾塔,三層要放在目標柱c上,二層則放在輔助柱b上,此時套用前兩層的方法來移動圓圈。四層的汗諾塔,四層要放在目標柱c上,三層則放在輔助柱b上,此時套用前三層的方法來移動圓圈。
以此類推,層數越多,擺放的步驟就越多,重複的操作就越多。
在移動的過程中間,起始柱a,輔助柱b和目標柱c就變成了圓圈所在的柱子a',圓圈要暫時放置的柱子b'和圓圈最終放置的柱子c'。這個時候,依然要注意套用上面的規律。只是,層數增多的情況下,移動的步驟增多,移向的柱子不斷變化,給遊戲帶來了一定的難度。
只要確定當前的目標柱和輔助柱,耐心的移動圓圈,就一定可以順利完成遊戲。
例如:十層的汗諾塔,第十層要放在目標柱c上,第九層則放在輔助柱b上。為了完成九層圓圈的移動,需要將第八層移動到目標柱c上。
以此類推,七層是輔助柱b,六層是目標柱c,五層是輔助柱b,四層是目標柱c,三層是輔助柱b,二層是目標柱c,一層是輔助柱b。在這些過程中,相對一層來說,輔助柱b就是其目標柱c',而相對二層來說,目標柱c就是其目標柱c'。達成每一層移向目標柱c'的目標,也就達成了所有層數移向目標柱c的目標!
以上全部內容為個人玩汗諾塔的經驗,希望可以幫助到玩汗諾塔的親們!
漢諾塔問題,盤子具體走法,漢諾塔問題,五個盤子具體走法
五個柱子!分別為1號 2號 3號 五個盤子 a b c d e 這樣走 a 3 b 2 a 2 c 3 a 1 b 3 a 3 d 2 a 2 b 1 a 1 c 2 a 3 b 2 1 2 e 3 a 1 b 3 a 3 c 1 a 2 b 1 a 1 d 3 a 3 b 2 a 2 c 3 a ...
漢諾塔該怎麼玩,方法,漢諾塔5層怎麼走
漢諾塔玩法如下 遊戲裡有三根柱子,左邊的柱子上從下往上按照大小順序摞著n片圓盤。玩家需要做的是把圓盤從下面開始按從大順序重新擺放在右邊的柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。柱子 在一個平板底座上間隔一定距離有三根完全一樣的柱子1,2,3,柱子的長短決定於所移...
pascal經典試題 漢諾塔,pascal經典試題 漢諾塔
var a,b,c char n integer procedure hanoi n integer a,b,c char begin if n 0 then begin hanoi n 1,a,c,b writeln move a,to c hanoi n 1,b,a,c end end begi...