题目大意:如果你这都不知道——额~~~我竟无言以对。算了,为了照顾新手和菜鸟,我还是说一下。就是有3根柱子,在A柱上从下往上按照大小顺序放着N个圆盘。现在要把圆盘从下面开始按大小顺序重新摆放在C柱上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。求一共要移多少次,并打出移动的过程。
分析:很显然,这道题最好是用递归来做。首先将N-1个圆盘从A柱移到B柱,再将第N个圆盘从A柱移到C柱,最后将N-1个圆盘从B柱移到C柱,然后再作边界判断,代码如下:
void move(int a,char x,char y,char z){
if (a==0) return;
move(a-1,x,z,y);
/*将a号圆盘从x柱移到z柱*/
printf("%d:%c to %c\n",a,x,z); ans++;
move(a-1,y,x,z);
}
注意:其中ans要定全程变量!
主程序就更不用说了,读入后直接调用move函数,代码如下:
int main(){
int n;
scanf("%d",&n);
dfs(n,'A','B','C');
printf("%d\n",ans);
system("pause>nul");
return 0;
}
PS:然后把两段代码拼接起来即可