✅ PAT 甲级题目讲解1008《Elevator》摘要本文讲解 PAT 甲级 1008 题《Elevator》的完整解题过程。题目要求模拟电梯按顺序停靠给定楼层的耗时计算上升每层 6 秒、下降每层 4 秒、每层停留 5 秒初始位于第 0 层。文章从题目简介、样例分析入手逐步拆解为读入数据→逐层判断方向→累加时间→输出结果的四步模拟思路并给出完整 C 代码、常见错误提醒、复杂度分析以及思维拓展方向。整体难度较低重点在于理解规则、正确模拟电梯行为。 题目简介本题模拟的是一个城市中只有一台电梯它根据乘客的请求依次停靠多个楼层。电梯从 0 层出发按照给定的楼层顺序依次访问目标楼层。电梯移动规则如下每上升一层楼耗时6 秒每下降一层楼耗时4 秒每次到达一个目标楼层都会停留 5 秒初始位置固定为第 0 层最终不需返回。 样例分析输入样例3 2 3 1含义请求数量3 次依次前往楼层2 → 3 → 1初始楼层为 0模拟过程如下从 0 → 2上升 2 层耗时2×6122 \times 6 122×612秒 停留 5 秒从 2 → 3上升 1 层耗时666秒 停留 5 秒从 3 → 1下降 2 层耗时2×482 \times 4 82×48秒 停留 5 秒总时间为125658541 12 5 6 5 8 5 41125658541输出41 解题思路 电梯行为模拟 简单加法累加本题是典型的“按规则模拟过程”的题目只需逐步累加时间开销即可。 变量说明变量名含义n请求次数要访问的楼层个数t当前请求楼层s总时间累计值p当前电梯所在楼层初始为 0✅ Step 1读入数据与初始化cinn;p0;// 初始电梯位置为 0 层✅ Step 2逐个处理请求楼层while(n--){cint;if(tp){s(t-p)*6;// 上升}elseif(tp){s(p-t)*4;// 下降}s5;// 到达后停留 5 秒pt;// 更新当前位置}✅ Step 3输出结果couts;✅ 完整代码#includebits/stdc.husingnamespacestd;intn,t,s,p;intmain(){cinn;p0;// 初始在 0 层while(n--){cint;if(tp){s(t-p)*6;}elseif(tp){s(p-t)*4;}s5;// 每到一层需停留 5 秒pt;// 更新电梯当前位置}couts;return0;} 常见错误提醒错误类型错误表现忘记初始化楼层位置忘记设置起始楼层为 0导致初始偏移错误停留时间未加每次到达目标楼层都需 5 秒上升/下降耗时搞反上升应乘 6下降应乘 4不能写错忘记更新当前楼层p每次处理完时间计算要更新当前楼层p为本次需到达的t✅ 总结归纳本题为电梯规则模拟题不涉及算法难度关键是认真理解题意模拟逐层判断电梯上升或下降并累加相应时间注意初始化当前楼层为 0过程中要逐次更新所在楼层数最终只需输出总耗时。⏱️ 复杂度分析时间复杂度O(n)\mathcal{O}(n)O(n)一次遍历楼层请求空间复杂度O(1)\mathcal{O}(1)O(1)仅使用常数变量 思维拓展如果电梯支持同时处理多个请求非顺序如何最优调度若加上“不同乘客等待时间”的优化目标会变成经典的调度算法问题本题思想可类比打印任务队列、线程任务模拟、电梯调度系统设计等场景。