问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
已知小C在时刻 t1 点了外卖,外卖平台上显示的预计送达时间为 t2,而实际送达时间为 t3。需要判断外卖是否超时。如果外卖超时,则输出 "Yes";否则输出 "No"。
t3 在 t2 之后则认定为超时。
实际送达时间与预计送达时间在 2 小时之内。
整体思路分析
- 首先将时间化为由分钟表示的int型
- 再对于送达外卖时间和应到时间进行比较,判断是否超时
注意事项
由于题设并未有天数的表示,则需根据实际送达时间与预计送达时间在两小时内来判断时间是否属于同一天,若不属于同一天则需要加上1440分钟
具体代码
-
构造一个transfor函数来将string型的时间转化为int型的时间,以便于之后的运算。函数类型为int,返回值为换算成分钟的时间。在这里先用substr函数将string中代表小时、分钟的数字提取出来,再将其转化为int型,最后返回总时间。
int transfor(string s) { int hours; hours= stoi(s.substr(0,2))*60; int minutes; minutes = stoi(s.substr(3, 2)); int time = hours + minutes; return time; } -
利用transform函数转化时间
int T2 = transfor(t2);//预计送达时间 int T3 = transfor(t3);//实际送达时间 -
这是一个易错点,我刚开始写代码的时候就是没有注意到这里然后导致错误。实际送达时间和预计送达时间可能在不同的一天,则需要先假设其两个时间点在同一天,然后进行判断是否在两个小时之间。若在两个小时之间,则不需要进行运算;若是不在两个小时之间,则时间小的那个时间点是在第二天,需要对其转化出来的时间加上1440分钟。
if (T2 > T3 && T2 - T3 > 120) { T3 += add; } else if (T3 > T2 && T3 - T2 > 120) { T2 += add; } -
最后进行判断T2和T3的时间的大小,输出是否超时的结果。
if (T2 < T3) { return "Yes"; } else { return "No"; }感悟
在完成这个题目之后,我感受最深的就是怎么去处理和时间相关的逻辑,包括stoi、substr等函数的应用,在将string时间转化为int时间的感受,其中印象最深的还是对于跨天情况的处理,这使我在之后的学习中多了一个思考方式。