202306-时间规划(luogu-B3838)
GESP一级真题练习。为2023年6月一级认证真题。时间差计算问题。
luogu-B3838
题目要求
描述
小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟,你能通过编程帮他做到吗?
输入
输入 4 行,第一行为开始时刻的小时,第二行为开始时刻的分钟,第三行为结束时刻的小时,第四行为结束时刻的分钟。输入保证两个时刻是同一天,开始时刻一定在结束时刻之前。时刻使用 24 小时制,即小时在 0 到 23 之间,分钟在 0 到 59 之间。
输出
输出一行,包含一个整数,从开始时刻到结束时刻之间有多少分钟。
输入样例-1
9
5
9
6
输出样例-1
1
输入样例-2
9
5
10
0
输出样例-2
55
题目分析
这道题目主要考察时间差的计算。需要注意以下几点:
输入数据包含四个整数:
- 开始时刻的小时(0-23)
- 开始时刻的分钟(0-59)
- 结束时刻的小时(0-23)
- 结束时刻的分钟(0-59)
计算思路:
- 将时间全部转换为分钟
- 开始时刻分钟数 = 小时数 × 60 + 分钟数
- 结束时刻分钟数 = 小时数 × 60 + 分钟数
- 两个时刻的差值即为所求的分钟数
示例代码
#include <iostream>
using namespace std;
int main() {
// 定义变量存储开始时刻和结束时刻的小时、分钟
int hour, minute, hour2, minute2;
// 依次读入开始时刻的小时、分钟,结束时刻的小时、分钟
cin >> hour >> minute >> hour2 >> minute2;
// 计算时间差:将两个时刻都转换为分钟数,然后相减
// 开始时刻总分钟数 = hour * 60 + minute
// 结束时刻总分钟数 = hour2 * 60 + minute2
// 时间差 = 结束时刻总分钟数 - 开始时刻总分钟数
cout << (hour2 * 60 + minute2) - (hour * 60 + minute);
return 0;
}
附一个孩子的解题思路,稍微绕了一点,但好在是自己想的:
#include <iostream>
using namespace std;
int main() {
// 定义变量存储开始和结束时刻的小时、分钟
int hour, minute, hour2, minute2;
// 读入开始时刻和结束时刻
cin >> hour >> minute >> hour2 >> minute2;
// 如果结束时刻的分钟数小于开始时刻的分钟数
// 需要向小时借位,即结束时刻减1小时,分钟数加60
if (minute2 < minute) {
hour2 -= 1; // 小时数减1
minute2 += 60; // 分钟数加60
}
// 计算小时差
int i = hour2 - hour;
// 输出总分钟数 = 小时差×60 + 分钟差
cout << i * 60 + (minute2 - minute);
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on