地面上有标号为 A、B、C 的三根柱,在 A 柱上放有 $10$ 个直径相同中间有孔的圆盘,从上到下依次编号为 $1,2,3\dots$,将 A 柱上的部分盘子经过 B 柱移入 C 柱,也可以在 B 柱上暂存。如果 B 柱上的操作记录为“进、进、出、进、进、出、出、进、进、出、进、出、出”。那么,在 C 柱上,从下到上的编号为( )。
别急着套公式,这题就是考你手算能力。记住栈的精髓:后进先出。拿到操作串,先在纸上把 B 柱的盘子按顺序推上去,每次遇到“出”就立刻把 B 柱最上面的盘子记下来,这就是 C 柱从下到上的序列。
最容易栽跟头的地方是搞混“从下到上”和“从上到下”的顺序,题目问的是 C 柱从下到上,也就是最早放进去的盘子在底部,最后放进去的在顶部,千万别把顺序倒过来选成 A 或 B。其次是模拟时手滑,比如第 7 步“出”时 B 柱里是 1 和 3,3 在顶上,应该出 3 而不是出 1,这就导致后面全乱套。还有把 A 柱的编号看反,A 柱从上到下是 1 到 10,取盘子永远是取最上面的那个,别把 10 当成第一个被取走的。
这道题考查的是栈(Stack)的数据结构模拟,属于线性结构中非常基础但极易出错的一类。命题人喜欢用这种“进进出出”的操作记录来考学生对 LIFO(后进先出)原理的直观理解,而不需要你写代码,纯粹靠逻辑推演和细心计算。
首先把概念理清楚:A、B、C 三根柱子本质上都是栈。A 柱初始从上到下编号 1 到 10,意味着 1 在栈顶,10 在栈底。操作“进”就是从 A 柱顶部取一个盘子放到 B 柱顶部;“出”就是从 B 柱顶部取一个盘子放到 C 柱顶部。题目要求的是 C 柱从下到上的编号,也就是盘子进入 C 柱的顺序——先进去的在最底下,后进去的在上面。
拿到这道题,思考心法很简单:不要试图一次性算出最终结果,而是像玩纸牌游戏一样,一步一步模拟 B 柱的状态。每做一次“进”,就把当前 A 柱最上面的数字记到 B 柱末尾;每做一次“出”,就把 B 柱最后一个数字记下来(这就是 C 柱的一个新盘子),然后从 B 柱删掉它。这样就能保证每一步都符合 LIFO 规则。
我们来具体推演一下这 13 步操作,初始 A 柱顶部是 1,B 柱为空,C 柱为空:
1. 进:A 顶是 1,把 1 放到 B 柱,B 变为 [1],A 顶变为 2。 2. 进:A 顶是 2,把 2 放到 B 柱,B 变为 [1, 2],A 顶变为 3。 3. 出:B 顶是 2,把 2 放到 C 柱,C 变为 [2],B 变为 [1]。 4. 进:A 顶是 3,B 变为 [1, 3],A 顶变为 4。 5. 进:A 顶是 4,B 变为 [1, 3, 4],A 顶变为 5。 6. 出:B 顶是 4,C 变为 [2, 4],B 变为 [1, 3]。 7. 出:B 顶是 3,C 变为 [2, 4, 3],B 变为 [1]。 8. 进:A 顶是 5,B 变为 [1, 5],A 顶变为 6。 9. 进:A 顶是 6,B 变为 [1, 5, 6],A 顶变为 7。 10. 出:B 顶是 6,C 变为 [2, 4, 3, 6],B 变为 [1, 5]。 11. 进:A 顶是 7,B 变为 [1, 5, 7],A 顶变为 8。 12. 出:B 顶是 7,C 变为 [2, 4, 3, 6, 7],B 变为 [1, 5]。 13. 出:B 顶是 5,C 变为 [2, 4, 3, 6, 7, 5],B 变为 [1]。
至此,C 柱从下到上的编号就是 2、4、3、6、7、5。对比选项,只有 D 选项完全匹配。
避坑方面,这里有两个高频错误点:一是第 7 步“出”时,很多同学会误以为 B 柱里是 1 和 3,然后错误地认为 1 在顶上,从而把 1 输出,导致后面序列变成 2 4 3 1...,正好掉进 C 选项的陷阱。其实栈顶永远是最后放进去的那个,第 5 步放进 4,第 4 步放进 3,所以 3 在顶上,必须先出 3。二是顺序问题,题目明确问“从下到上”,也就是先输出的是最早放进去的盘子,很多同学习惯从上到下读,就会把答案倒过来,选成 A 或 B。做题时一定要看清方向词。
从考频数据来看,栈结构在历年真题中非常活跃。题库共考过 115 题,覆盖 8 个考试级别,其中 NOIP 普及组初赛就考了 8 题,占比约 7%,说明这类题目在普及组属于必考或高频考点。逐年分布显示,2024 年单年考了 25 题,2025 年考了 15 题,2026 年考了 18 题,近三年的爆发式增长表明命题组对数据结构基础题的考查力度在加大,尤其是模拟类题目。分赛事看,GESP 五级考了 35 题,CSP 入门级考了 32 题,GESP 六级考了 12 题,可见栈是入门到中级阶段的基石。
基于这个趋势,未来考试很可能会继续青睐这种纯逻辑模拟的栈操作题,难度不会太高,但会刻意增加干扰项,比如把“进”“出”的定义稍微变一下,或者问“从上到下”的顺序来考验审题。目前数据不足以支撑更具体的题型预测,暂无足够依据预测,但建议同学们熟练掌握栈的模拟方法,这类题稳拿分。
综上,正确答案是 D。