移动汉诺塔,拢共分三步

zhangwch  •  13天前


第一步,把 k-1 个从 A 挪到 C;
第二步,把第 k 个从 A 挪到 B;
第三步,把 k-1 个从 C 挪到 B。

#include <iostream>
using namespace std;

// 将 k 个盘子从 a 移动到 b ,其中 c 是中间杆
void work(int k, char a, char b, char c) {
    if (!k) return;
    // 1.先将k-1个从a到c
    work(k - 1, a, c, b);
    // 2.把第k个从a到b
    cout << a << "->" << b << endl;
    // 3.再将k-1个从c到b
    work(k - 1, c, b, a);
}


int main()
{
    int k;
    cin >> k;
    work(k, 'A', 'C', 'B');
    return 0;
}

Comments: