1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <stdio.h>
#include <stdlib.h>
int moves=0; /*步數*/
void do_hey(int layer,int disk_main,int disk_emp,int disk_des){/*盤子的編號、原本盤子位於的碟、空的碟、要移去的碟*/
if(!layer) /*若盤子編號為0(沒有盤子)*/
return; /*表示移完了*/
do_hey(layer-1,disk_main,disk_des,disk_emp); /*把layer以上的盤子,移到空的碟*/
printf("move layer_%d %d->%d\n",layer,disk_main,disk_des); /*再把layer從原本的碟,移到目的地碟*/
moves++; /*步數+1*/
do_hey(layer-1,disk_emp,disk_main,disk_des); /*最後把layer以上的盤子(此時位於空的碟)移到layer(此時位於目的地碟)上面*/
return; /*回傳*/
}
int main(){
int x=10; /*預設有10個盤子*/
scanf(" %d",&x); /*讀取輸入*/
do_hey(x,1,2,3); /*將layer設為輸入,原本的碟為1,空的碟為2,目的地碟為3*/
printf("moves: %d\n",moves); /*印出步數*/
system("pause"); /*暫停*/
return 0; /*結束*/
}
沒有留言:
張貼留言