问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
已知小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。需要判断外卖是否超时。如果外卖超时,则输出 "Yes";否则输出 "No"。
t3 在 t2 之后则认定为超时。
实际送达时间与预计送达时间在 2 小时之内。
测试样例
示例 1:
输入:
t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"
示例 2:
输入:
t1 = "23:00", t2 = "00:21", t3 = "00:23"
输出:"Yes"
示例 3:
输入:
t1 = "23:05", t2 = "00:05", t3 = "23:58"
输出:"No"
思路说明
要判断外卖是否超时,我们需要比较实际送达时间 t3 和预计送达时间 t2。如果 t3 在 t2 之后,则认为外卖超时。
为了实现这个功能,我们可以将时间字符串转换为分钟数进行比较。具体步骤如下:
-
将时间字符串转换为小时和分钟:
使用字符串分割方法将时间字符串(如 "19:05")拆分为小时和分钟。 -例如,"19:05" 会被拆分为小时 19 和分钟 5。
-
计算从午夜开始到每个时间点的分钟数:
将小时乘以 60 并加上分钟,得到自午夜以来的总分钟数。 例如,"19:05" 会被转换为 1145 分钟。
-
比较实际送达时间和预计送达时间的分钟数:
检查
t3是否在t2之后的 2 小时内。如果是,并且t3大于t2,则返回 "Yes";否则返回 "No"。如果
t3不在t2之后的 2 小时内,直接返回 "No"。
代码
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int timeToMinutes(const string& time) {
int hours, minutes;
char colon;
stringstream ss(time);
ss >> hours >> colon >> minutes;
return hours * 60 + minutes;
}
string solution(const string& t1, const string& t2, const string& t3) {
int t2_minutes = timeToMinutes(t2);
int t3_minutes = timeToMinutes(t3);
if (abs(t3_minutes - t2_minutes) <= 120) {
if (t3_minutes > t2_minutes) {
return "Yes";
} else {
return "No";
}
} else {
return "No";
}
}
int main() {
cout << (solution("18:00", "19:05", "19:05") == "No" ? "Passed" : "Failed") << endl;
cout << (solution("23:00", "00:21", "00:23") == "Yes" ? "Passed" : "Failed") << endl;
cout << (solution("23:05", "00:05", "23:58") == "No" ? "Passed" : "Failed") << endl;
return 0;
}
代码解释:
-
timeToMinutes 函数:将时间字符串转换为自午夜以来的分钟数。例如,"19:05" 会被转换为 1145 分钟。
-
solution 函数: 首先将
t2和t3转换为分钟数。 然后检查t3是否在t2之后的 2 小时内。如果是,并且t3大于t2,则返回 "Yes";否则返回 "No"。 如果t3不在t2之后的 2 小时内,直接返回 "No"。