PAT(甲级)1008 Elevator (20point(s))

本文介绍了一种算法,用于根据楼层变化计算电梯的总等待时间。通过对比当前楼层与前一楼层,判断上下楼方向并计算相应的等待时间。文章提供了完整的C++代码实现,包括输入楼层数量和具体楼层,最终输出总等待时间。
题目

题目链接

思路

每次和上次的楼层比较一下,判断是上楼还是下楼;

代码
#include <iostream>
using namespace std;

int main()
{
     int n, pre, cur, ans  = 0;
     scanf("%d", &n);
     ans += n * 5;//总的等待时间
     scanf("%d", &pre);
     ans += 6 * pre;
     for(int i = 1; i < n; i ++){
          scanf("%d", &cur);
          if((cur - pre) >= 0) ans += (cur - pre) * 6;//上楼
          else ans += (pre - cur) * 4; //下楼
          pre = cur;
     }
     printf("%d\n", ans);
     system("pause");
     return 0;
}

### PAT 甲级 1034 测试点 4 的解析 PAT 甲级 1034 题目名为 **"Elevator"**,主要涉及电梯运行过程中的时间计算以及路径规划问题。对于测试点 4 的注意事项和可能的陷阱如下: #### 输入数据范围 测试点 4 可能会包含大量的输入数据或者极端情况下的边界条件。例如,可能存在非常大的楼层差值或较多的人数请求。因此,在实现算法时需特别关注变量的数据类型选择,建议使用 `long` 或者更大的整型来存储中间结果以防止溢出[^1]。 #### 边界条件处理 该测试点可能会考察一些特殊的边界场景,比如所有人都在同一层楼等待的情况、目标楼层为负数或者是零等情况。程序应该能够正确识别并合理处理这些特殊情况而不应报错或返回错误的结果。 #### 时间复杂度优化 由于此题涉及到多次循环迭代来进行模拟运算,如果效率不够高,则容易超时。针对这一点,可以考虑采用更高效的数据结构如优先队列 (priority queue) 来管理乘客请求顺序,从而减少不必要的比较操作次数,提高整体性能表现。 以下是基于上述分析的一个 Python 实现方案: ```python def elevator(): n = int(input()) floors = list(map(int, input().split())) total_time = abs(floors[0]) * 6 current_floor = floors[0] for i in range(1, len(floors)): diff_floors = abs(current_floor - floors[i]) if floors[i] > current_floor: total_time += diff_floors * 6 + 5 elif floors[i] < current_floor: total_time += diff_floors * 4 + 5 else: continue current_floor = floors[i] print(total_time) elevator() ``` 以上代码片段展示了如何通过遍历每一对相邻的目标楼层之间的距离,并根据不同方向调整所需的时间增量完成整个行程耗时统计的任务逻辑。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值