5606:[GESP202609四级] 新汉诺塔
文件提交:无需freopen
内存限制:512 MB
时间限制:1.000 S
评测方式:普通裁判
金币值:
命题人:
提交:0
解决:0
题目描述
## 题目背景
2026 年 09 月 GESP C++ 四级编程第 1 题
## 题目描述
汉诺塔问题是最经典的递推问题之一:
有三个可以放圆盘柱子,编号为 $A$、$B$ 和 $C$。
开始时柱子 $A$ 上套着 $n$ 个圆盘,它们从上到下按照从小到大的顺序排列。
我们的任务是要把这 $n$ 个圆盘移到柱子 $C$ 上,并保持它们的原有顺序不变。
在移动圆盘的过程中,需要遵守以下规则:
1. 圆盘只能从一根柱子顶部拿出,从另一根柱子顶部放入。
2. 每次只能移动一个圆盘。
3. 小圆盘必须时刻位于大圆盘之上。
小杨在学习了汉诺塔问题后,决定添加一个新规则:
4. 每一次移动,圆盘只能从 $A$ 移动到 $B$,从 $B$ 移动到 $C$,或者从 $C$ 移动到 $A$;其它移动是不允许的。
在新规则下,给定圆盘数量 $n$,试问最少移动步数是多少?
## 输入格式
输入一个正整数 $n$,表示圆盘的数量。
## 输出格式
输出一个整数,表示在新规则下将 $n$ 个圆盘从 $A$ 移动到 $C$ 所需的最少移动步数。
## 样例
```input1
2
```
```output1
7
```
```input2
3
```
```output2
21
```
## 说明/提示
### 样例解释 1
以下步骤是最佳的(编号为 1 的是小盘,为 2 的是大盘):
1. 将 1 从 $A$ 移动到 $B$;
2. 将 1 从 $B$ 移动到 $C$;
3. 将 2 从 $A$ 移动到 $B$;
4. 将 1 从 $C$ 移动到 $A$;
5. 将 2 从 $B$ 移动到 $C$;
6. 将 1 从 $A$ 移动到 $B$;
7. 将 1 从 $B$ 移动到 $C$。
可以证明没有更少步骤可以完成这个任务。
## 数据范围
对于所有数据,$n \le 20$。