Java 實現(xiàn)一個漢諾塔實戰(zhàn)練習(xí)
漢諾塔簡介:

我們想要實現(xiàn)的是 讓 A柱上的盤子,移動到C柱上
1層漢諾塔

2層漢諾塔

3層漢諾塔詳解圖

第一步

第二步

第三步

第四步

第五步

第六步

第七步

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

程序如下
import java.util.Scanner;
public class Manuscript {
static int times;// 移動次數(shù)
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);,細(xì)細(xì)琢磨
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層漢諾塔的輸出結(jié)果附圖(可以返回去看看,對一對)

有什么疑問,可以在下方討論,切記 不要自己帶入一個特別大數(shù)字去展開,帶入一個 1 ~3 ,了解規(guī)律就行。不主張展開,主張掌握規(guī)律(遞推公式)。
本文結(jié)束。
以上就是Java 實現(xiàn)一個漢諾塔實戰(zhàn)練習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Java 漢諾塔的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在SpringBoot中實現(xiàn)一個訂單號生成系統(tǒng)的示例代碼
在Spring Boot中設(shè)計一個訂單號生成系統(tǒng),主要考慮到生成的訂單號需要滿足的幾個要求:唯一性、可擴展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下2024-02-02
Java?Cookie與Session實現(xiàn)會話跟蹤詳解
session的工作原理和cookie非常類似,在cookie中存放一個sessionID,真實的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請求的時候帶上sessionID,服務(wù)端根據(jù)sessionID進行數(shù)據(jù)的響應(yīng)2022-11-11

