Java 實現一個漢諾塔實戰練習
漢諾塔簡介:
我們想要實現的是 讓 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 ,瞭解規律就行。不主張展開,主張掌握規律(遞推公式)。
本文結束。
以上就是Java 實現一個漢諾塔實戰練習的詳細內容,更多關於Java 漢諾塔的資料請關註WalkonNet其它相關文章!