文章目錄
- 漢諾塔簡介:
- 我們想要實作的是 讓 A柱上的盤子,移動到C柱上
- 1層漢諾塔
- 2層漢諾塔
- 3層漢諾塔詳解圖
- 第一步
- 第二步
- 第三步
- 第四步
- 第五步
- 第六步
- 第七步
- 經過上面的圖解,相比大家一定在一定程度了解到漢諾塔的游戲規則,以及怎么去玩,
- 程式如下
- 3層漢諾塔的輸出結果附圖(可以回傳去看看,對一對)
- 有什么疑問,可以在下方討論,切記 不要自己帶入一個特別大數字去展開,帶入一個 1 ~3 ,了解規律就行,不主張展開,主張掌握規律(遞推公式),
- 本文結束,
漢諾塔簡介:

?
我們想要實作的是 讓 A柱上的盤子,移動到C柱上
1層漢諾塔

?
2層漢諾塔

3層漢諾塔詳解圖

第一步

第二步

第三步

第四步

第五步

第六步

第七步

?
經過上面的圖解,相比大家一定在一定程度了解到漢諾塔的游戲規則,以及怎么去玩,
總之 最終C柱上第一個盤子,是最大,最頂的是最小的,而且在操作程序中,前幾步就是為了讓三個柱子中最大的盤子移動到C柱上,
然后不斷,將它兩個柱子中最大盤子往上累加,(盤子從大到小,從下往上擺放)
而且盤子一多,你就會發現程序中間,除了最大的盤子,其余的盤子都會集中在 B柱上,這樣才能把 A 柱上最底下也是最大的盤子,移動到C上,
這是規律一
還有一個規律,在最大的盤子移動C柱上之后,第二個大的盤子要放在A柱上,其余盤子按照規則全部放在B柱上,
這樣第二大的盤子才能移動到最大的盤子上
說白了,盤子再多,也要按照上面兩個規律,才能完成整個游戲
那我把最大盤子上面的所有盤子看成一個整體,放在B柱上,最大盤子移動到C柱上,把B柱上盤子直接蓋上去,不就行了,反正也就是重復那兩個規律而已

程式如下
import java.util.Scanner;
public class Manuscript {
static int times;// 移動次數
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char A = 'A';
char B = 'B';
char C = 'C';
int n = scanner.nextInt();
game(n,A,B,C);
scanner.close();
}
public static void move(int disk,char M,char N){
System.out.println("第"+(++times)+"次移動,盤子"+disk+" "+M +"---->"+N);
}
public static void game(int n,char A,char B,char C){
if(n==1){
move(n,A,C);// 把A柱目前最大盤子放在C柱上,第一次肯定最大的那個
}else{
// 將 n-1 個 盤子 放到B柱子,注意ABC位置,再看看下面 move(n,A,C);,細細琢磨
game(n-1,A,C,B);// A B(C) C(B)
move(n,A,C);
// 把n-1 個盤子 放在C上,注意ACB位置
game(n-1,B,A,C);// A(B) B(A) C
}
}
}
3層漢諾塔的輸出結果附圖(可以回傳去看看,對一對)

有什么疑問,可以在下方討論,切記 不要自己帶入一個特別大數字去展開,帶入一個 1 ~3 ,了解規律就行,不主張展開,主張掌握規律(遞推公式),
?
本文結束,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333518.html
標籤:其他
上一篇:HTML+CSS+JavaScript實作猜數字游戲
下一篇:opencv人臉識別
