新汉诺塔

jy625557 程序题 共 个子题

题目描述

汉诺塔问题是最经典的递推问题之一: 有三个可以放圆盘柱子,编号为 $A$、$B$ 和 $C$。 开始时柱子 $A$ 上套着 $n$ 个圆盘,它们从上到下按照从小到大的顺序排列。 我们的任务是要把这 $n$ 个圆盘移到柱子 $C$ 上,并保持它们的原有顺序不变。 在移动圆盘的过程中,需要遵守以下规则:

  1. 圆盘只能从一根柱子顶部拿出,从另一根柱子顶部放入。
  2. 每次只能移动一个圆盘。
  3. 小圆盘必须时刻位于大圆盘之上。 小杨在学习了汉诺塔问题后,决定添加一个新规则:
  4. 每一次移动,圆盘只能从 $A$ 移动到 $B$,从 $B$ 移动到 $C$,或者从 $C$ 移动到 $A$;其它移动是不允许的。 在新规则下,给定圆盘数量 $n$,试问最少移动步数是多少?

输入格式

输入一个正整数 $n$,表示圆盘的数量。

输出格式

输出一个整数,表示在新规则下将 $n$ 个圆盘从 $A$ 移动到 $C$ 所需的最少移动步数。

样例

输入样例 1

2

输出样例 1

7

样例解释 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$。 可以证明没有更少步骤可以完成这个任务。

输入样例 2

3

输出样例 2

21

数据范围

对于所有数据,$n \le 20$

本题为编程题,提交代码并运行通过测试点后判分。

正在加载题目数据…
已答 /
子题
该题型需在试卷/作业中作答,单题练习暂不支持
答案解析
提交记录
共 条 仅展示自由练习提交
正在加载提交记录…
讨论
发布
登录后参与讨论 立即登录
发布讨论需先绑定并验证手机号 去绑定手机号
加载中…
我
我
回复 @
回复 @
发送
还没有人讨论,来发表第一条吧