Java 實(shí)現(xiàn)一個(gè)漢諾塔實(shí)戰(zhàn)練習(xí)
漢諾塔簡介:
我們想要實(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é)果附圖(可以返回去看看,對一對)
有什么疑問,可以在下方討論,切記 不要自己帶入一個(gè)特別大數(shù)字去展開,帶入一個(gè) 1 ~3 ,了解規(guī)律就行。不主張展開,主張掌握規(guī)律(遞推公式)。
本文結(jié)束。
以上就是Java 實(shí)現(xiàn)一個(gè)漢諾塔實(shí)戰(zhàn)練習(xí)的詳細(xì)內(nèi)容,更多關(guān)于Java 漢諾塔的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java的idea連接mongodb數(shù)據(jù)庫的詳細(xì)教程
這篇文章主要介紹了Java的idea連接mongodb數(shù)據(jù)庫的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11MyBatis-Plus自定義通用的方法實(shí)現(xiàn)
MP自帶的條件構(gòu)造器雖然很強(qiáng)大,有時(shí)候也避免不了寫稍微復(fù)雜一點(diǎn)業(yè)務(wù)的sql,本文主要介紹了MyBatis-Plus自定義通用的方法實(shí)現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Java Lambda表達(dá)式與匿名內(nèi)部類的聯(lián)系和區(qū)別實(shí)例分析
這篇文章主要介紹了Java Lambda表達(dá)式與匿名內(nèi)部類的聯(lián)系和區(qū)別,結(jié)合實(shí)例形式分析了Java Lambda表達(dá)式與匿名內(nèi)部類功能、用法、區(qū)別及操作注意事項(xiàng),需要的朋友可以參考下2019-10-10springboot+springsecurity如何實(shí)現(xiàn)動(dòng)態(tài)url細(xì)粒度權(quán)限認(rèn)證
這篇文章主要介紹了springboot+springsecurity如何實(shí)現(xiàn)動(dòng)態(tài)url細(xì)粒度權(quán)限認(rèn)證的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Spring Cloud項(xiàng)目前后端分離跨域的操作
這篇文章主要介紹了Spring Cloud項(xiàng)目前后端分離跨域的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06spark中使用groupByKey進(jìn)行分組排序的示例代碼
這篇文章主要介紹了spark中使用groupByKey進(jìn)行分組排序的實(shí)例代碼,本文通過實(shí)例代碼給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Java結(jié)合JS實(shí)現(xiàn)URL編碼與解碼
這篇文章介紹了Java結(jié)合JS實(shí)現(xiàn)URL編碼與解碼的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03