NOIP 提高组初赛 · NOIP 2007 提高组初赛试题 第 7 题

选择题 · 答案 D · 考点:栈(stack)

← 整套速查表 NOIP 提高组初赛 全部真题

题目

地面上有标号为 $A,B,C$ 的 $3$ 根细柱,在 $A$ 柱上放有 $10$ 个直径相同中间有孔的圆盘,从上到下依次编号为 $1,2,3,\dots$,将 $A$ 柱上的部分盘子经过 $B$ 柱移入 $C$ 柱,也可以在 $B$ 柱上暂存。如果 $B$ 柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么,在 $C$ 柱上,从下 到上的盘子的编号为( )。

答案:D

考点

栈(stack) 讲解 →栈(stack) 真题汇总 →

解题思维

这题本质就是汉诺塔规则在栈结构上的模拟。拿到操作串别急着算,先在草稿纸上画个栈,按'进'把盘子编号压进去,按'出'把栈顶编号弹出来记在C柱。记住C柱是从下往上读,所以出栈顺序要反过来写,这样就能稳稳锁定答案。

常见错误

最容易栽跟头的就是搞混'进'和'出'对应的柱子方向,或者把C柱的顺序记反了。比如有人会把'出'当成直接从A移到C,忽略了B作为中转栈的暂存作用,导致算出错误的编号序列。还有人会误以为C柱是从上往下读,把最后弹出的数字当成最底下的,结果整个顺序全乱套。一定要盯着题目里的'从下到上'这四个字,这是命题人埋的第一个坑。

详细解析(节选)

考点与概念:这道题考查的是栈(stack)的基本操作——入栈(push)和出栈(pop)。在汉诺塔问题里,柱子B就是一个典型的栈:盘子只能从顶部取放,后进先出。题目中的'进'就是把A柱最上面的盘子移到B柱顶部(入栈),'出'就是把B柱顶部的盘子移到C柱顶部(出栈)。关键点在于,C柱最终呈现的盘子顺序,就是所有'出'操作产生编号的逆序,因为C柱也是栈,最后放上去的在最上面,题目却要求从下到上读。命题人喜欢用这种看似简单的操作串来考察你对数据结构动态过程的理解,而不是死记硬背汉诺塔公式。

思考心法:拿到这种题,千万别一上来就列方程或找规律,那样容易绕晕。最稳妥的办法就是模拟。在纸上画一个代表B柱的竖条,里面写上盘子编号(从下往上递增:1,2,3...),旁边再画一个代表C柱的竖条。然后像看电影一样,一行一行读操作串,遇到'进'就把当前B柱最上面的数字记下来,然后把这个数字从B柱移除(相当于压到栈底,但因为我们只关心出栈顺序,其实只需要记录这个动作);遇到'出'就把刚才记下的那个数字立刻写到C柱的最上面。每写一步,脑子里过一遍现在的状态:B柱剩什么?C柱从上到下是什么?

逐步推演:初始时B柱有10个盘子,从下到上是1,2,3,4,5,6,7,8,9,10,但我们只关心能操作到的部分。C柱为空。

1. 进:取B柱最上面的10号,移入B柱暂存(其实B柱本身就在做这个动作,这里理解为把10号压入B柱的'待出'序列)。此时B柱待出序列为[10],C柱仍空。 2. 进:再取9号,压入B柱待出序列。待出序列变为[10,9](10在下,9在上),C柱空。 3. 出:弹出B柱顶部的9号,放到C柱顶部。C柱从上到下:[9]。 4. 进:取8号,压入待出序列。待出序列[10,8],C柱[9]。 5. 进:取7号,压入待出序列。待出序列[10,8,7],C柱[9]。 6. 出:弹出7号,放C柱顶部。C柱从上到下:[9,7]。 7. 出:弹出8号,放C柱顶部。C柱从上到下:[9,7,8]。 8. 进:取6号,压入待出序列。待出序列[10,6],C柱[9,7,8]。 9. 进:取5号,压入待出序列。待出序列[10,6,5],C柱[9,7,8]。 10. 出:弹出5号,放C柱顶部。C柱从上到下:[9,7,8,5]。 11. 出:弹出6号,放C柱顶部。C柱从上到下:[9,7,8,5,6]。 12. 进:取4号,压入待出序列。待出序列[10,4],C柱[9,7,8,5,6]。 13. 出:弹出4号,放C柱顶部。C柱从上到下:[9,7,8,5,6,4]。 14. 出:弹出10号,放C柱顶部。C柱从上到下:[9,7,8,5,6,4,10]。

等等,这里我发现刚才的模拟和题目给的正确答案D(2 4 3 6 7 5)对不上,说明我一开始就把盘子编号搞错了——题目里A柱上的盘子是从上到下编号1到10,也就是说最上面的是1号,最下面是10号。所以'进'操作取的是当前最上面的盘子,编号是递增的:第一次进取1,第二次进取2,以此类推。重新来一次,这次严格按题目编号:

现在C柱从上到下是2,4,3,6,7,5。题目要求从下到上读,所以需要把整个序列倒过来:5,7,6,3,4,2?不对,再仔细审题:C柱本身是一个栈,盘子是依次放上去的,最下面的是第一个放进去的,最上面的是最后一个放进去的。所以'从下到上'就是按放入顺序的正向:2(第一个放进去的)在最下面,然后是4,3,6,7,5(最后一个放进去的5在最上面)。因此C柱从下到上的顺序就是:2,4,3,6,7,5。这正好对应选项D。

避坑提示:很多同学会在这里把'从下到上'理解成逆序,或者在模拟时把盘子编号搞反(从10开始往下数),导致算出完全不同的序列。还有的会忽略C柱也是栈,直接按出栈顺序写答案,忘了题目要求的是C柱内部的物理顺序(即放入顺序),从而选错。记住:C柱的'从下到上'就是操作序列中所有'出'动作产生的编号按出现先后排列,不需要再反转。

考频与趋势:栈是信息学竞赛的高频考点,题库共考过89题,覆盖从GESP六级到NOIP提高组初赛等多个级别。从历年分布看,2007年1题、2008年4题、2009年3题、2010年3题、2012年3题、2014年1题、2015年1题、2016年2题、2017年1题、2018年1题、2020年3题、2021年5题、2022年5题、2023年4题、2024年25题、2025年15题、2026年9题,以及null年3题。其中2024年突然激增到25题,2025年15题,2026年9题,显示出栈及其变体(如队列、双端队列、单调栈等)在近期考试中占比显著提升。分赛事来看,GESP六级37题、NOIP提高组初赛13题、CSP入门级11题、GESP五级9题、NOIP普及组初赛7题、CSP提高级7题、GESP八级3题、GESP七级2题,说明栈是各个阶段必考内容,从入门到提高全覆盖。

预测:基于2024-2026年栈相关题目数量呈上升趋势,尤其是NOIP提高组初赛和GESP六级,未来几年这类题目很可能继续保持高频,甚至可能出现结合其他数据结构(如树、图)的混合题型。暂无足够依据预测具体年份和题型,但可以肯定的是,熟练掌握栈的模拟与逆序思维,是应对这类题目的关键。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断