以前學(xué)東西不扎實(shí),現(xiàn)在撿撿也好,漢諾塔本是C語(yǔ)言開(kāi)門(mén)就學(xué)的東西,不過(guò)上課那會(huì)兒真心聽(tīng)不懂,直到大二了,才明白那是咋回事,我感覺(jué)的編程,真的是一張窗戶(hù)紙,不過(guò)捅破要花時(shí)間理解吸收。
題目描述:有一個(gè)塔,塔內(nèi)有A,B,C三個(gè)柱子。起初,A柱上有n個(gè)盤(pán)子,依次由大到小、從下往上堆放,要求將它們?nèi)恳频紺柱上;在移動(dòng)過(guò)程中可以利用B柱,但每次只能移到一個(gè)盤(pán)子,且必須使三個(gè)柱子上始終保持大盤(pán)在下,小盤(pán)在上的狀態(tài)。要求編程輸出移動(dòng)的步驟。
代碼如下:
int hanoi(int n,char one,char two,char three)//是核心函數(shù)了
{
int move(char one,char two);
if(n==1)//當(dāng)只有一個(gè)盤(pán)子時(shí),直接從a柱移到c柱就好,也是遞歸程序的一個(gè)出口
move(one,three);
else{ //盤(pán)子大于一時(shí)
hanoi(n-1,one,three,two);//先借助c柱把上面的n-1個(gè)盤(pán)子從a柱全部移動(dòng)到b柱
move(one,three); //這時(shí)a柱只剩下一個(gè)盤(pán)子了,移動(dòng)到c柱即可
hanoi(n-1,two,one,three);//將b柱剩下的n-1個(gè)盤(pán)子借助a柱移動(dòng)到c柱,任務(wù)也就完成了
}
}
int main()
{
int n;
char a,b,c;
while(scanf("%d",&n)!=EOF)//可以輸入多組數(shù)據(jù)檢驗(yàn)結(jié)果
hanoi(n,'a','b','c');
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注