#include #include using namespace std; std::string solution(const std::string& t1, const std::string& t2, const std::string& t3) { // 解析时间字符串 int t1_hour = std::stoi(t1.substr(0, 2)); int t1_minute = std::stoi(t1.substr(3, 2)); int t2_hour = std::stoi(t2.substr(0, 2)); int t2_minute = std::stoi(t2.substr(3, 2)); int t3_hour = std::stoi(t3.substr(0, 2)); int t3_minute = std::stoi(t3.substr(3, 2)); // 转换为分钟数 int t1_minutes = t1_hour * 60 + t1_minute; int t2_minutes = t2_hour * 60 + t2_minute; int t3_minutes = t3_hour * 60 + t3_minute; // 处理跨天情况 if (t2_minutes < t1_minutes) {t2_minutes += 24 * 60; // 加上一天的分钟数} if (t3_minutes < t1_minutes) { t3_minutes += 24 * 60; // 加上一天的分钟数 } // 计算时间差 int t2_diff = t2_minutes - t1_minutes; int t3_diff = t3_minutes - t1_minutes; // 比较时间差 if (t3_diff <= t2_diff) { return "No"; } else { return "Yes"; } } int main() { std::cout << (solution("18:00", "19:05", "19:05") == "No") << std::endl; std::cout << (solution("23:00", "00:21", "00:23") == "Yes") << std::endl; std::cout << (solution("23:05", "00:05", "23:58") == "No") << std::endl; return 0; } 问题描述: 给定三个时间字符串 t1, t2, t3,它们表示一天中的时间点(格式为 HH:MM)。要求判断 t3 是否在 t1 和 t2 之间(不包括 t1 和 t2),考虑到时间可能跨越午夜的情况。 算法步骤: 解析时间字符串: 从时间字符串中提取小时和分钟。 将小时和分钟转换为分钟数(总分钟数),便于后续计算。 处理跨天情况: 如果 t2 的分钟数小于 t1 的分钟数,说明 t2 是在午夜之后,因此需要加上一天的分钟数(24 * 60)。 同理,如果 t3 的分钟数小于 t1 的分钟数,也需要加上一天的分钟数。 计算时间差: 计算 t2 与 t1 的时间差 t2_diff。 计算 t3 与 t1 的时间差 t3_diff。 比较时间差: 如果 t3_diff 小于或等于 t2_diff,则 t3 不在 t1 和 t2 之间,返回 "No"。 否则,t3 在 t1 和 t2 之间(考虑到跨天情况),返回 "Yes"。