内容发布更新时间 : 2025/6/20 3:01:44星期一 下面是文章的全部内容请认真阅读。
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. }