亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

用C程序解決漢諾塔問(wèn)題與青蛙跳臺(tái)階問(wèn)題(遞歸)

villainhr / 3393人閱讀

摘要:由此可知在前柱是中轉(zhuǎn)柱在之后也有兩種情況只有上有圓盤(pán)。并且我們的游戲目標(biāo)從一開(kāi)始的把上所有圓盤(pán)移到柱變成了把上所有圓盤(pán)移到柱上而在這時(shí)中轉(zhuǎn)柱是柱?,F(xiàn)在將步驟分為三個(gè)小步驟將上個(gè)圓盤(pán)全部移到柱上中轉(zhuǎn)柱柱。

一.漢諾塔問(wèn)題

? 漢諾塔是一種古印度游戲,該游戲的實(shí)質(zhì)就是在一塊木板上有三根固定的柱子

而在左邊的柱子上有著n個(gè)大小不同的圓盤(pán),我們需要做就是把左邊所有的盤(pán)子全部移到右邊的柱子上。操作規(guī)則:1.圓盤(pán)在柱子上必須按照從大到?。ù髨A盤(pán)在下)依次排列。2.每次只能移動(dòng)圓柱最上面的圓盤(pán)。

問(wèn)題分析:先假設(shè)三根柱子分別為“A”"B""C",A柱有著所有的初始盤(pán),我們的目的就是把A柱上的所有盤(pán)子全部移到C柱上。

n=1時(shí),直接把圓盤(pán)從A柱移動(dòng)到C柱就可。

n=2時(shí),A-->B,A-->C,B-->C。(在這操作中B為中轉(zhuǎn)柱)

n=3時(shí),A-->C,A-->B,C-->B,①A-->C,B-->A,B-->C,A-->C。對(duì)n=3這種情況進(jìn)行分析:在①之前圓盤(pán)所在圓柱的情況有兩種:

1.是所有圓盤(pán)在A,B,C三個(gè)圓柱中都有一個(gè)圓盤(pán)。

2.是A,C上有圓盤(pán)而B(niǎo)上沒(méi)有圓盤(pán)。

由此可知在①前B柱是中轉(zhuǎn)柱;在①之后也有兩種情況:

1.只有B,C上有圓盤(pán)。

2.A,B,C上都有一個(gè)圓盤(pán)。

并且我們的游戲目標(biāo)從一開(kāi)始的把A上所有圓盤(pán)移到C柱(A-->C),變成了把B上所有圓盤(pán)移到C柱上(B-->C),而在這時(shí)中轉(zhuǎn)柱是A柱。

......

直到A上有n個(gè)圓盤(pán)時(shí),現(xiàn)在對(duì)n這種情況進(jìn)行分析:想要把n個(gè)圓盤(pán)從A柱移到C柱上有三大步驟:

①將A上n-1個(gè)圓柱全部移到C柱上(中轉(zhuǎn)柱B柱)。

②將A上的一個(gè)圓盤(pán)移到C柱上。

③將B上n-1個(gè)圓盤(pán)全部移到C柱上(中轉(zhuǎn)柱A柱)。

在這要穿插一下遞歸的主要思想就是大事化小。現(xiàn)在將①步驟分為三個(gè)小步驟:

①將A上n-2個(gè)圓盤(pán)全部移到C柱上(中轉(zhuǎn)柱B柱)。

②將A上第n-1個(gè)圓盤(pán)移到B柱上。

③將C上n-2個(gè)圓盤(pán)移到A柱上(中轉(zhuǎn)柱A柱)。

然后將第二個(gè)①化為更小的三個(gè)步驟......就這樣一步步大事化小。

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

#includevoid hanoi(int n, char post_1, char post_2, char post_3){    if (n == 1)    {        printf("%c --> %c/n", post_1, post_3);    }    else    {        hanoi(n - 1, post_1, post_3, post_2);        printf("%c --> %c/n", post_1, post_3);        hanoi(n - 1, post_2, post_1, post_3);    }}int main(){    int n = 0;    char a = "A", b = "B", c = "C";    scanf("%d", &n);    hanoi(n, a, b, c);    return 0;}

?二.青蛙跳臺(tái)階問(wèn)題

? 一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)臺(tái)階。求該青蛙跳上一個(gè)n級(jí)臺(tái)階有多少種跳法?(實(shí)質(zhì)就是斐波那契數(shù)列的變種)

問(wèn)題分析:

我們不妨列舉一下n比較少的情況時(shí)的跳法:

①n=1時(shí),1種跳法。????????? ②n=2時(shí),有2種跳法。

③n=3時(shí),有3種跳法。????? ④n=4時(shí),有5種跳法。

⑤n=5時(shí),有8種跳法。

......

很明顯,同過(guò)觀察上面列舉的情況可以發(fā)現(xiàn):

n=3時(shí)所有的跳法等于n=1時(shí)和n=2時(shí)的所有跳法之和;

n=4時(shí)的所有跳法等于n=2和n=3時(shí)的所有跳法之和;

......

以此類(lèi)推可以得出f(n)=f(n-1)+f(n-2) (n>2)。(f(n)為跳法數(shù)量)

?

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

#includeint frogjump(int n){	if (n == 1)	{		return 1;	}	else if (n == 2)	{		return 2;	}	else	{		return frogjump(n - 1) + frogjump(n - 2);	}}int main(){	int n = 0;	scanf("%d", &n);	printf("%d", frogjump(n));	return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/123073.html

相關(guān)文章

  • 看動(dòng)畫(huà)輕松理解「遞歸「動(dòng)態(tài)規(guī)劃」

    摘要:程序員小吳打算使用動(dòng)畫(huà)的形式來(lái)幫助理解遞歸,然后通過(guò)遞歸的概念延伸至理解動(dòng)態(tài)規(guī)劃算法思想。因此,分治策略一般用來(lái)解決子問(wèn)題相互對(duì)立的問(wèn)題,稱(chēng)為標(biāo)準(zhǔn)分治,而動(dòng)態(tài)規(guī)劃用來(lái)解決子問(wèn)題重疊的問(wèn)題。難點(diǎn)就在于找出動(dòng)態(tài)規(guī)劃中的這三個(gè)概念。 在學(xué)習(xí)「數(shù)據(jù)結(jié)構(gòu)和算法」的過(guò)程中,因?yàn)槿肆?xí)慣了平鋪直敘的思維方式,所以「遞歸」與「動(dòng)態(tài)規(guī)劃」這種帶循環(huán)概念(繞來(lái)繞去)的往往是相對(duì)比較難以理解的兩個(gè)抽象知識(shí)點(diǎn)。...

    cnio 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)算法之漢諾問(wèn)題(Java遞歸

    摘要:漢諾塔問(wèn)題有三根柱子,源桿,暫存桿,目的桿上有層盤(pán)子,由小到大向下排列,現(xiàn)需要將桿的盤(pán)子移到桿中要求大的盤(pán)在下面,小的盤(pán)在上面一次只能移動(dòng)一個(gè)盤(pán)子個(gè)人思路先分析問(wèn)題,用數(shù)學(xué)的歸納法當(dāng)只有一個(gè)盤(pán)時(shí),直接移動(dòng)當(dāng)有兩個(gè)盤(pán)時(shí),先將小的移到暫存桿,再 漢諾塔問(wèn)題: 有三根柱子,源桿A,暫存桿temp,目的桿C A上有n層盤(pán)子,由小到大向下排列,現(xiàn)需要將A桿的盤(pán)子移到C桿中 ...

    yuxue 評(píng)論0 收藏0
  • 一個(gè)小青蛙,可以一次兩節(jié)樓梯,也可以一次一節(jié)樓梯,請(qǐng)問(wèn)他如果要101節(jié)樓梯,一共有幾種法方案

    摘要:一個(gè)小青蛙可以一次跳兩節(jié)樓梯也可以一次跳一節(jié)樓梯請(qǐng)問(wèn)他如果要跳節(jié)樓梯一共有幾種跳法方案問(wèn)題的描述很簡(jiǎn)單看到這個(gè)題目的時(shí)候我首先想到的就是舉例分析一波比如當(dāng)?shù)臅r(shí)候有幾種方案當(dāng)?shù)臅r(shí)候有幾種方案等等我們首先分析一波當(dāng)?shù)臅r(shí)候這個(gè)時(shí)候小青蛙只有一種跳 一個(gè)小青蛙,可以一次跳兩節(jié)樓梯,也可以一次跳一節(jié)樓梯,請(qǐng)問(wèn)他如果要跳101節(jié)樓梯,一共有幾種跳法方案? 問(wèn)題的描述很簡(jiǎn)單,看到這個(gè)題目的時(shí)候,我首...

    fsmStudy 評(píng)論0 收藏0
  • 經(jīng)典算法:漢諾

    摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤(pán),從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門(mén)小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來(lái)一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)sho...

    Lin_R 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<