题目名称 3531. [POJ 1958]奇怪的汉诺塔
输入输出 hanois.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravataryrtiop 于2021-01-20加入
开放分组 全部用户
提交状态
分类标签
递推
分享题解
通过:16, 提交:75, 通过率:21.33%
GravatarA?B?C 100 0.000 s 0.00 MiB C++
Gravatar1020 100 0.000 s 0.00 MiB C++
Gravatar增强型图元文件 100 0.000 s 0.00 MiB C++
GravatarZJL 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
GravatarCN_hacker 100 0.000 s 0.00 MiB C++
关于 奇怪的汉诺塔 的近10条评论(全部评论)

3531. [POJ 1958]奇怪的汉诺塔

★   输入文件:hanois.in   输出文件:hanois.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目背景】

Charlie Darkbrown 参加了另一门无聊的电脑课:此刻,老师仅仅在解释标准的 Hanoi Tower 问题,这让 Charlie 感到极其无聊

老师指着黑板(图4)说:“这就是我们的问题。
  • 有三个塔:A,B 和 C。
  • 有 $n$ 个塔盘。在智力游戏中,$n$ 是一个常见的数。
  • 每一个塔盘的大小均不相同。
  • 塔盘最初堆叠在塔A上,从顶到底大小依次增加。
  • 这个游戏的目标是把所有的塔盘从塔 A 移至塔 C。
  • 一个塔盘如果可以移到另一个塔上,那么这个塔必定是一个空塔或者塔顶的塔盘比这个塔盘大

因此,你的任务就是编写一个程序,计算将所有塔盘从塔A移到塔C所需的最小移动次数。”

“这实在太无聊了——所有人都知道这可以用简单的递归解决。我拒绝编写这么简单的东西!”

Charlie说道。老师长叹一声,“好吧,Charlie,让我们考虑一下我能为你做些什么:为你提供第四层塔 D

请你计算把所有的塔盘从塔A移到塔D所需的最小步数!”

Charlie很生气:“额.....好吧,我不知道四个塔的最佳算法。”


所以真正要解决的问题并不是Charlie所擅长的。事实上,Charlie唯一擅长的事是“坐在能解决这个问题的人的旁边”

而现在,你正是坐在他身边的人,并且,他已经在瞄着你的屏幕了。

【题目描述】

对于每一个输入的 $n(1 \le n \le 12)$,解出 $n$ 个盘子 $4$ 座塔的 Hanoi 问题最少需要多少步。

【输入格式】

 一个整数 $n(1 \le n \le 12)$,表示总共有多少个塔盘在塔 A 上

【输出格式】

 一个整数,表示把这 $n$ 个塔盘从塔 A 移动到塔 D 上所需的最小步数

【样例输入】

3

【样例输出】

5

【提示】

 结合 $3$ 塔hanoi解决

【来源】

北京大学 POJ 1958

translated by Skylake.