#include <stdio.h> int Count=0; void move(char x, int n, char z) { printf("%2d. Move disk %d from %c to %c\n",++Count,n,x,z); } void hanoi (int n, char x, char y, char z) { // 算法3.5 // 将塔座x上按直径由小到大且至上而下编号为1至n的n个圆盘按规则搬到 // 塔座z上,y可用作辅助塔座。 // 搬动操作 move (x, n, z) 可定义为: // (c是初值为0的全局变量,对搬动计数) // printf("%i. Move disk %i from %c to %c\n", ++c, n, x, z); if (n==1) move(x, 1, z); //将编号为1的圆盘从x移到z else { hanoi(n-1,x,z,y); move(x, n, z); //将编号为n的圆盘从x移到z hanoi(n-1, y, x, z); //将y上编号为1至n-1的圆盘移到z,x作辅助塔 } } int main(){ int n; while(scanf("%d", &n) != EOF){ Count = 0; hanoi(n, 'X', 'Y', 'Z'); putchar('\n'); } return 0; } /************************************************************** Problem: 2146 User: admin Language: C++ Result: Accepted Time:14 ms Memory:1144 kb ****************************************************************/