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其它相關文章!

推薦閱讀: