小C的外卖超时判断|豆包MarsCode AI刷题

101 阅读3分钟

问题描述

小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。如果 t3t2 之后,则认为外卖超时。

为了实现这个功能,我们可以将时间字符串转换为分钟数进行比较。具体步骤如下:

  1. 将时间字符串转换为小时和分钟

    使用字符串分割方法将时间字符串(如 "19:05")拆分为小时和分钟。 -例如,"19:05" 会被拆分为小时 19 和分钟 5。

  2. 计算从午夜开始到每个时间点的分钟数

    将小时乘以 60 并加上分钟,得到自午夜以来的总分钟数。 例如,"19:05" 会被转换为 1145 分钟。

  3. 比较实际送达时间和预计送达时间的分钟数

    检查 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;
}

代码解释:

  1. timeToMinutes 函数:将时间字符串转换为自午夜以来的分钟数。例如,"19:05" 会被转换为 1145 分钟。

  2. solution 函数: 首先将 t2 和 t3 转换为分钟数。 然后检查 t3 是否在 t2 之后的 2 小时内。如果是,并且 t3 大于 t2,则返回 "Yes";否则返回 "No"。 如果 t3 不在 t2 之后的 2 小时内,直接返回 "No"。