欢迎关注本专栏《C++从零基础到信奥赛入门级(CSP-J)》
问题:1223. 汉诺塔的移动次数
类型:函数、递归基础
题目描述:
汉诺塔的问题大家都已经很熟悉了,有三个柱子,每个柱子上有一些大小不一的金片,要把金片从 A 柱移动到 C 柱,可以借助 B 柱,请问 n 个金片的情况下,需要最少移动多少次?
输入:
输入一个整数 n 代表金片的数量(n≤20)。
输出:
一个整数,代表 n 个金片的移动次数。
样例:
输入:
3
输出:
7
完整代码如下:
#include<bits/stdc++.h> // 包含所有标准库头文件
using namespace std; // 使用标准命名空间,简化后续代码中的std::前缀
int main(){
// 一、分析问题
// 已知:一个整数 n 代表金片的数量(n≤20);
// 未知:需要最少移动多少次?
// 关系: T(n)=2^n-1
// 二、定义变量(已知、未知、关系)
int n; // 定义一个整型变量 n 用于存储圆盘数量
// 三、输入已知
cin >> n; // 从标准输入读取圆盘数量 n
// 四、根据关系计算
long long c = pow(2, n) - 1; // 使用 pow 函数计算 2^n,并减去 1 得到 2^n - 1
// 五、输出未知
cout << c; // 输出计算得到的移动次数
return 0; // 主函数返回 0,表示程序正常结束
}