問題:大梵天創(chuàng)造世界的時候做了三根金剛石柱子默刚,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤竞膳。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上蹄殃。并且規(guī)定郭厌,在小圓盤上不能放大圓盤袋倔,在三根柱子之間一次只能移動一個圓盤。
分析:主要就是遞歸的思想折柠;
題目要求是將所有圓盤最終從A號柱移動到C號柱宾娜,對于問題規(guī)模為n的情況,可將問題分解為三步:
1.將頂上的n-1個黃金圓盤從A號柱通過C號柱移動到B號柱上扇售。
2.將A號柱子上的最后一個圓盤移動到C號柱上前塔。
3.將B號柱上的n-1個圓盤通過A移動到C號柱上嚣艇。
代碼:
#include<stdio.h>
int move_times=0;
//把盤子從a移動到c
void Hanoi(int num_disk,char a,char b,char c)
{
if(num_disk==0) return;
else if(num_disk==1)
{
move_times++;
printf("move the disk %d from %c to %c\n",num_disk,a,c);
return;
}
else {
Hanoi(num_disk-1,a,c,b);
printf("move the disk %d from %c to %c\n",num_disk,a,c);
move_times++;
Hanoi(num_disk-1,b,a,c);
}
}
int main()
{
int num_disk;
printf("input the number of disk:\n");
scanf("%d",&num_disk);
Hanoi(num_disk,'a','b','c');
printf("the move times is %d\n",move_times);
return 0;
}