亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

手把手帶你用java搞定漢諾塔

 更新時(shí)間:2021年08月06日 11:08:28   作者:rampant boy  
這篇文章主要給大家介紹了關(guān)于Java青蛙跳臺(tái)階問(wèn)題的解決思路與代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么是漢諾塔

漢諾塔問(wèn)題是一個(gè)經(jīng)典的問(wèn)題。漢諾塔(Hanoi Tower),又稱(chēng)河內(nèi)塔,源于印度一個(gè)古老傳說(shuō)。

大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤(pán)。

大梵天命令婆羅門(mén)把圓盤(pán)從下面開(kāi)始按大小順序重新擺放在另一根柱子上。并且規(guī)定,任何時(shí)候,在小圓盤(pán)上都不能放大圓盤(pán),且在三根柱子之間一次只能移動(dòng)一個(gè)圓盤(pán)。問(wèn)應(yīng)該如何操作?

問(wèn)題剖析

我們假設(shè)圓盤(pán)數(shù)量為n,圓盤(pán)初始放在A(yíng)柱上,最后移到C柱。

n=1

移動(dòng)方法:A -> C

n=2

在這里插入圖片描述

移動(dòng)方法:A -> B A -> C B -> C

n=3

在這里插入圖片描述

移動(dòng)方法:A -> C A -> B C -> B A -> C B -> A B -> C A -> C

小結(jié)

通過(guò)這上面三個(gè)情況,我們可以知道:

  • 當(dāng)紅色圓盤(pán)上面沒(méi)有其他圓盤(pán)的時(shí)候,就直接把紅色圓盤(pán)移到C柱上。
  • 當(dāng)紅色圓盤(pán)上面有其他圓盤(pán)的時(shí)候,先把其他圓盤(pán)移到B柱上,然后再將紅色圓盤(pán)移到C柱上。在把B柱上紫色圓盤(pán)上面的其他圓盤(pán)移到A柱,接著再將紫色圓盤(pán)移到C柱上。然后再次循環(huán)。

例如當(dāng)n=4時(shí),

image-20210805172203810

image-20210805172437620

Java代碼實(shí)現(xiàn)

public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        hanoiTower(n,'A','B','C');
    }

    public static void hanoiTower(int n,char A,char B,char C) {
        if(n < 2) {
            move(A,C);
        } else {
            hanoiTower(n - 1,A,C,B);
            move(A,C);
            hanoiTower(n - 1,B,A,C);
        }
    }

    public static void move(char src,char des) {
        System.out.println(src + " -> " + des);
    }
}

例如輸入3,結(jié)果為:

在這里插入圖片描述

代碼講解

move函數(shù)

 public static void move(char src,char des) {
    System.out.println(src + " -> " + des);
}

src表示起始圓盤(pán)所在的柱子,des表示該圓盤(pán)需要移動(dòng)到的柱子。

hanoiTower函數(shù)

public static void hanoiTower(int n,char A,char B,char C) {
    if(n < 2) {
        move(A,C);
    } else {
        hanoiTower(n - 1,A,C,B);
        move(A,C);
        hanoiTower(n - 1,B,A,C);
    }
}

hanoiTower的第一個(gè)參數(shù),代表還有n個(gè)圓盤(pán)需要移動(dòng),A代表起始圓盤(pán)所在的柱子,C代表該圓盤(pán)所要移動(dòng)到的柱子,B代表圓盤(pán)移動(dòng)時(shí)所經(jīng)歷的中間柱子。

例如n=3時(shí),先需要把上面兩個(gè)圓盤(pán)經(jīng)過(guò)一系列的移動(dòng),全部移動(dòng)到B柱上,所以就得調(diào)用hanoiTower(2,A,C,B);然后再將A柱上唯一的一個(gè)圓盤(pán)移動(dòng)到C柱上,所以調(diào)用move(A,C);然后再將B柱上除最下面的圓盤(pán)以外的圓盤(pán)移動(dòng)到A柱上,然后再重復(fù)這個(gè)步驟,直到所有的圓盤(pán)都移動(dòng)到C柱為止。

所以調(diào)用hanoiTower(2,B,A,C);

附:C語(yǔ)言實(shí)現(xiàn)漢諾塔

#include<stdio.h>

void Move(char src, char des)
{
	printf("%c -> %c", src, des);
	printf("\n");
}

void HanoiTower(int n, char A, char B, char C)
{
	if (n == 1)
	{
		Move(A, C);
	}
	else
	{
		HanoiTower(n - 1, A, C, B);
		Move(A, C);
		HanoiTower(n - 1, B, A, C);
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	HanoiTower(n, 'A', 'B', 'C');
	return 0;
}

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java實(shí)現(xiàn)簡(jiǎn)單樹(shù)結(jié)構(gòu)

    Java實(shí)現(xiàn)簡(jiǎn)單樹(shù)結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單樹(shù)結(jié)構(gòu)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android、iOS和Java通用的AES128加密解密示例代碼

    Android、iOS和Java通用的AES128加密解密示例代碼

    現(xiàn)在很多App在與服務(wù)器接口的請(qǐng)求和響應(yīng)過(guò)程中,為了安全都會(huì)涉及到加密和解密的問(wèn)題,如果不加的話(huà)就會(huì)是明文的,即使加了GZIP也可以被直接解壓成明文。如果同時(shí)有Android和IOS的App的話(huà)、必須要保證加密和解密的算法一致、不然后臺(tái)沒(méi)法處理,下面通過(guò)這篇文章學(xué)習(xí)下。
    2016-11-11
  • 把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn)

    把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn)

    這篇文章主要介紹了把Java程序轉(zhuǎn)換成exe,可直接運(yùn)行的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 詳解Java去除json數(shù)據(jù)中的null空值問(wèn)題

    詳解Java去除json數(shù)據(jù)中的null空值問(wèn)題

    這篇文章主要介紹了詳解Java去除json數(shù)據(jù)中的null空值問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java異常中toString()和getMessage()區(qū)別

    Java異常中toString()和getMessage()區(qū)別

    在java異常體系中,要打印異常信息,可以通過(guò):e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印,本文主要介紹了Java異常中toString()和getMessage()區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題

    關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題

    這篇文章主要介紹了關(guān)于Mybatis-Plus字段策略與數(shù)據(jù)庫(kù)自動(dòng)更新時(shí)間的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java讀寫(xiě)Cookie記錄的方法

    Java讀寫(xiě)Cookie記錄的方法

    這篇文章主要介紹了Java讀寫(xiě)Cookie記錄的方法,實(shí)例分析了java針對(duì)cookie記錄讀取與寫(xiě)入的技巧,需要的朋友可以參考下
    2015-05-05
  • Java8中List轉(zhuǎn)換String字符串幾種方式

    Java8中List轉(zhuǎn)換String字符串幾種方式

    這篇文章主要給大家介紹了關(guān)于Java8中List轉(zhuǎn)換String字符串的幾種方式,在實(shí)際開(kāi)發(fā)中經(jīng)常遇到List轉(zhuǎn)為String字符串的情況,文中給出了幾種方法的示例代碼,需要的朋友可以參考下
    2023-07-07
  • J2SE基礎(chǔ)之命令行中編寫(xiě)第一個(gè) Hello World

    J2SE基礎(chǔ)之命令行中編寫(xiě)第一個(gè) Hello World

    “Hello World”程序指的是只在計(jì)算機(jī)屏幕上輸出“Hello, World!”(意為“世界,你好!”)這行字符串的計(jì)算機(jī)程序。hello world作為所有編程語(yǔ)言的起始階段,占據(jù)著無(wú)法改變的地位,所有的編程第一步就在于此了!經(jīng)典之中的經(jīng)典!hello world!
    2016-05-05
  • elasticsearch啟動(dòng)警告無(wú)法鎖定JVM內(nèi)存

    elasticsearch啟動(dòng)警告無(wú)法鎖定JVM內(nèi)存

    今天小編就為大家分享一篇關(guān)于elasticsearch啟動(dòng)警告無(wú)法鎖定JVM內(nèi)存,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03

最新評(píng)論