题解 | 大吉大利,今晚吃鸡
大吉大利,今晚吃鸡
https://www.nowcoder.com/practice/c9d9f9c60b4448eabc0569f80a3461bb
#include <iostream>
using namespace std;
int countStep = 0; // 总步数
// 把 n 个盘子从 from 移到 to(只能走相邻柱子)
void move(int n, char from, char to) {
countStep++;
//cout << "第" << countStep << "步: " << from << " -> " << to << endl;
}
// 把 n 个盘子从 a 移到 c(只能相邻移动)
void hanoi(int n, char a, char b, char c) {
if (n == 0) return;
// 1. 把 n-1 个 a → c
hanoi(n-1, a, b, c);
// 2. 把最底下 1 个 a → b
move(1, a, b);
// 3. 把 n-1 个 c → a
hanoi(n-1, c, b, a);
// 4. 把最底下 1 个 b → c
move(1, b, c);
// 5. 把 n-1 个 a → c
hanoi(n-1, a, b, c);
}
int main() {
int n;
while(cin >> n){
countStep = 0;
hanoi(n, 'A', 'B', 'C');
cout << countStep << endl;
}
return 0;
}