救援争先:按到达时间排序难题解析与代码实现
```cpp #include <iostream> #include <vector> #include <algorithm> #include <string> // 定义一个结构体来存储每支救援队的信息 struct RescueTeam { int id; // 队伍编号 int startTime; // 出发时间,将时间转换为分钟存储 int journeyTime; // 路程所需时间,同样转换为分钟 int arrivalTime; // 到达时间,转换为分钟 // 构造函数,用于初始化结构体成员 RescueTeam(int _id, int _startTime, int _journeyTime) : id(_id), startTime(_startTime), journeyTime(_journeyTime) { arrivalTime = startTime + journeyTime; } }; // 自定义比较函数,用于对救援队按到达时间排序 bool compare(const RescueTeam& a, const RescueTeam& b) { if (a.arrivalTime != b.arrivalTime) { return a.arrivalTime < b.arrivalTime; // 到达时间早的排在前面 } if (a.startTime != b.startTime) { return a.startTime < b.startTime; // 到达时间相同,出发时间早的排在前面 } return a.id < b.id; // 到达时间和出发时间都相同,编号小的排在前面 } // 将时间字符串(hh:mm)转换为分钟数 int timeToMinutes(const std::string& timeStr) { int h = std::stoi(timeStr.substr(0, 2)); int m = std::stoi(timeStr.substr(3, 2)); return h * 60 + m; } int main() { int n; std::cin >> n; // 读取救援队的数量 std::vector<RescueTeam> teams; // 存储所有救援队信息的向量 for (int i = 1; i <= n; ++i) { std::string startTimeStr, journeyTimeStr; std::cin >> startTimeStr >> journeyTimeStr; // 读取出发时间和路程所需时间 int startTime = timeToMinutes(startTimeStr); int journeyTime = timeToMinutes(journeyTimeStr); teams.emplace_back(i, startTime, journeyTime); // 创建救援队对象并添加到向量中 } // 对救援队按自定义规则排序 std::sort(teams.begin(), teams.end(), compare); // 输出排序后的救援队编号 for (const auto& team : teams) { std::cout << team.id << std::endl; } return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 时间转换时,要确保将小时和分钟正确地转换为分钟数,避免计算错误。 2. 在自定义比较函数中,要严格按照题目要求的优先级进行排序,避免排序结果不符合预期。 3. 输入输出时,要注意格式的正确性,特别是时间字符串的读取和处理。 ######[AI写代码神器 | 693点数解答 | 2025-08-07 10:56:54]
- C语言:用栈和队列模拟停车场进出与计费系统实现思路解析(阿里通义 | 627点数解答 | 2024-07-22 10:38:49)487
- C语言实现:停车场顺序栈与便道链队列模拟系统(GPT | 4017点数解答 | 2024-07-22 10:49:18)393
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- 易语言读取文本文件并显示到超级列表框:代码示例与注意要点(DeepSeek | 571点数解答 | 2025-08-23 20:54:40)224
- 易语言:读取并显示特定文本到超级列表框,还能增加新数据的方法与要点(DeepSeek | 1317点数解答 | 2025-08-23 20:58:40)230
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)278
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)308
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)313
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)463
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)356
- C语言实现多班级学生信息管理系统:含增删改查与多样排序功能(GPT | 2547点数解答 | 2024-12-15 22:08:58)358
- C语言实现学生信息管理系统:含增删改查与多种排序功能(GPT | 6408点数解答 | 2024-12-15 22:10:03)349