48. } 49.
50. void Creat(st ta[], int n) 51. {
52. ta[0].name = 'A'; 53. ta[0].top = n-1;
54. //把所有的圆盘按从大到小的顺序放在柱子A上 55. for (int i=0; i 57. //柱子B,C上开始没有没有圆盘 58. ta[1].top = ta[2].top = 0; 59. for (int i=0; i 60. ta[1].s[i] = ta[2].s[i] = 0; 61. //若n为偶数,按顺时针方向依次摆放 A B C 62. if (n%2 == 0) 63. { 64. ta[1].name = 'B'; 65. ta[2].name = 'C'; 66. } 67. else //若n为奇数,按顺时针方向依次摆放 A C B 68. { 69. ta[1].name = 'C'; 70. ta[2].name = 'B'; 71. } 72. } 73. 74. long Pow(int x, int y) 75. { 76. long sum = 1; 77. for (int i=0; i 80. return sum; 81. } 82. 83. void Hannuota(st ta[], long max) 84. { 85. int k = 0; //累计移动的次数 86. int i = 0; 87. int ch; 88. while (k < max) 89. { 90. //按顺时针方向把圆盘1从现在的柱子移动到下一根柱子 91. ch = ta[i%3].Pop(); 92. ta[(i+1)%3].Push(ch); 93. cout << ++k << \ 94. \95. \96. i++; 97. //把另外两根柱子上可以移动的圆盘移动到新的柱子上 98. if (k < max) 99. { 100. //把非空柱子上的圆盘移动到空柱子上,当两根柱子都为空时,移动较小的圆盘 101. if (ta[(i+1)%3].Top() == 0 || 102. ta[(i-1)%3].Top() > 0 && 103. ta[(i+1)%3].Top() > ta[(i-1)%3].Top()) 104. { 105. ch = ta[(i-1)%3].Pop(); 106. ta[(i+1)%3].Push(ch); 107. cout << ++k << \ 108. << ch << \109. << \110. } 111. else 112. { 113. ch = ta[(i+1)%3].Pop(); 114. ta[(i-1)%3].Push(ch); 115. cout << ++k << \ 116. << ch << \117. << \118. } 119. } 120. } 121. }