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

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

2層漢諾塔

3層漢諾塔詳解圖

第一步

第二步

第三步

第四步

第五步

第六步

第七步

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

程序如下
import java.util.Scanner;
public class Manuscript {
static int times;// 移動(dòng)次數(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)+"次移動(dòng),盤子"+disk+" "+M +"---->"+N);
}
public static void game(int n,char A,char B,char C){
if(n==1){
move(n,A,C);// 把A柱目前最大盤子放在C柱上,第一次肯定最大的那個(gè)
}else{
// 將 n-1 個(gè) 盤子 放到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 個(gè)盤子 放在C上,注意ACB位置
game(n-1,B,A,C);// A(B) B(A) C
}
}
}
3層漢諾塔的輸出結(jié)果附圖(可以返回去看看,對(duì)一對(duì))

有什么疑問,可以在下方討論,切記 不要自己帶入一個(gè)特別大數(shù)字去展開,帶入一個(gè) 1 ~3 ,了解規(guī)律就行。不主張展開,主張掌握規(guī)律(遞推公式)。
本文結(jié)束。
以上就是Java 實(shí)現(xiàn)一個(gè)漢諾塔實(shí)戰(zhàn)練習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Java 漢諾塔的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java中Supplier知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于java中Supplier知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-04-04
Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法示例
這篇文章主要介紹了Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法,結(jié)合實(shí)例形式分析了java反射機(jī)制獲取注解的具體實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下2019-09-09
在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼
在Spring Boot中設(shè)計(jì)一個(gè)訂單號(hào)生成系統(tǒng),主要考慮到生成的訂單號(hào)需要滿足的幾個(gè)要求:唯一性、可擴(kuò)展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下2024-02-02
Java?Cookie與Session實(shí)現(xiàn)會(huì)話跟蹤詳解
session的工作原理和cookie非常類似,在cookie中存放一個(gè)sessionID,真實(shí)的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請(qǐng)求的時(shí)候帶上sessionID,服務(wù)端根據(jù)sessionID進(jìn)行數(shù)據(jù)的響應(yīng)2022-11-11
為什么Java是程序員受歡迎的語言這幾個(gè)原因你該清楚
Java一直穩(wěn)居程序員很受歡迎的編程語言的榜首,是企業(yè)中使用最廣泛的編程語言。這篇文章主要介紹了為什么Java是程序員受歡迎的語言這幾個(gè)原因你該清楚,需要的朋友可以參考下2020-07-07

