前言
本系列文章是筆者學習資料結構的筆記,如有不妥之處歡迎指正
目錄
- 前言
- 題干
- 分析
- 代碼
題干
Description
?漢諾塔是源自印度神話的玩具,
?神創造世界的是哦胡制造了三根柱子,在其中一根柱子上從上至下按大小順序依次摞有64片黃金圓盤,
?神命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上,要求小圓盤上面不能放大圓盤且一次只能移動一個圓盤,
Input
?輸入金片的個數n,這里的n<=10,
Output
?輸出搬動金片的全程序,格式見樣例,
Sample
Input
?2
Output
Move disk 1 from A to B
Move disk 2 from A to C
Move disk 1 from B to C
分析
由規律可得
? 如果是一個盤子
???直接將A柱的盤子移到C柱
?否則
???先將A柱的n-1個盤子借助C移到B
???將A柱的盤子從A移到C
???最后將B柱的n-1個盤子借助A移到C
- 以上分析直接寫成遞回的形式
代碼
#include<stdio.h>
void hannuota(int n,char ch1,char ch2,char ch3)
{
if(n==1) //如果是一個盤子
{
printf("Move disk %d from %c to %c\n",n,ch1,ch3); //直接將A柱的盤子移到C柱
}
else //否則
{
hannuota(n-1,ch1,ch3,ch2); //先將A柱的n-1個盤子借助C移到B
printf("Move disk %d from %c to %c\n",n,ch1,ch3); //將A柱的盤子從A移到C
hannuota(n-1,ch2,ch1,ch3); //最后將B柱的n-1個盤子借助A移到C
}
}
int main()
{
int n;
scanf("%d",&n);
hannuota(n,'A','B','C');
}
輸入
3
輸出
Move disk 1 from A to C
Move disk 2 from A to B
Move disk 1 from C to B
Move disk 3 from A to C
Move disk 1 from B to A
Move disk 2 from B to C
Move disk 1 from A to C
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253979.html
標籤:其他
上一篇:POJ 1321 棋盤問題
下一篇:C語言實作掃雷
