最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手把手帶你用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),又稱河內(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柱上,最后移到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)文章

  • SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁(yè)面實(shí)例

    SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁(yè)面實(shí)例

    大家好,本篇文章主要講的是SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁(yè)面實(shí)例,感興趣的同學(xué)趕快來(lái)看一看,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Java通過(guò)反射來(lái)打印類的方法實(shí)現(xiàn)

    Java通過(guò)反射來(lái)打印類的方法實(shí)現(xiàn)

    本文主要介紹了Java通過(guò)反射來(lái)打印類的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Java集合類之HashTable,Properties篇

    詳解Java集合類之HashTable,Properties篇

    這篇文章主要為大家詳細(xì)介紹一下Java集合類中HashTable和Properties的用法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-07-07
  • Java并發(fā)編程之線程創(chuàng)建介紹

    Java并發(fā)編程之線程創(chuàng)建介紹

    這篇文章主要介紹了Java并發(fā)編程之線程創(chuàng)建,進(jìn)程是代碼在數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,線程則是一個(gè)實(shí)體,一個(gè)進(jìn)程中至少有一個(gè)線程,下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過(guò)程

    mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過(guò)程

    這篇文章主要介紹了mybatis中使用InsertProvider注解報(bào)錯(cuò)解決全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java實(shí)現(xiàn)直接插入排序和折半插入排序算法示例

    Java實(shí)現(xiàn)直接插入排序和折半插入排序算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)直接插入排序和折半插入排序算法示例,文中對(duì)算法的思想和時(shí)間復(fù)雜度都有簡(jiǎn)單的講解,需要的朋友可以參考下
    2016-04-04
  • springboot整合druid及多數(shù)據(jù)源配置的demo

    springboot整合druid及多數(shù)據(jù)源配置的demo

    這篇文章主要介紹了springboot整合druid及多數(shù)據(jù)源配置的demo,本篇主要分兩部分 ①springboot整合druid的代碼配置,以及druid的監(jiān)控頁(yè)面演示;②對(duì)實(shí)際場(chǎng)景中多數(shù)據(jù)源的配置使用進(jìn)行講解,需要的朋友可以參考下
    2024-01-01
  • 從零開(kāi)始:快速入門(mén)SpringBoot注解的精髓

    從零開(kāi)始:快速入門(mén)SpringBoot注解的精髓

    Spring?Boot是一個(gè)用于快速構(gòu)建基于Spring框架的應(yīng)用程序的開(kāi)源框架,它通過(guò)使用注解來(lái)簡(jiǎn)化配置和開(kāi)發(fā)過(guò)程,使開(kāi)發(fā)人員能夠更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),Spring?Boot提供了許多注解,用于定義和配置應(yīng)用程序的各個(gè)方面,需要的朋友可以參考下
    2023-10-10
  • 詳解Spring Cloud 熔斷機(jī)制--斷路器

    詳解Spring Cloud 熔斷機(jī)制--斷路器

    這篇文章主要介紹了詳解Spring Cloud 熔斷機(jī)制--斷路器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解springboot之jackson的兩種配置方式

    詳解springboot之jackson的兩種配置方式

    這篇文章主要介紹了詳解springboot之jackson的兩種配置方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論

靖江市| 徐州市| 广饶县| 曲阜市| 呼伦贝尔市| 延长县| 科尔| 长汀县| 都江堰市| 东丽区| 甘泉县| 卓尼县| 南和县| 西吉县| 辉南县| 闻喜县| 特克斯县| 拜泉县| 韩城市| 阆中市| 休宁县| 黑河市| 宕昌县| 贵德县| 大余县| 塔城市| 华坪县| 石台县| 罗平县| 宝清县| 宜宾县| 海兴县| 华安县| 彭水| 柳州市| 沽源县| 抚州市| 巴塘县| 穆棱市| 伊川县| 平果县|