文章

【GESP】C++一级真题练习(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


题目分析

这道题目主要考察时间差的计算。需要注意以下几点:

  1. 输入数据包含四个整数:
    • 开始时刻的小时(0-23)
    • 开始时刻的分钟(0-59)
    • 结束时刻的小时(0-23)
    • 结束时刻的分钟(0-59)
  2. 计算思路:
    • 将时间全部转换为分钟
    • 开始时刻分钟数 = 小时数 × 60 + 分钟数
    • 结束时刻分钟数 = 小时数 × 60 + 分钟数
    • 两个时刻的差值即为所求的分钟数
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main() {
    int hour, minute, hour2, minute2;
    cin >> hour >> minute >> hour2 >> minute2;
    cout << (hour2 * 60 + minute2) - (hour * 60 + minute);
    return 0;
}

附一个孩子的解题思路,稍微绕了一点,但好在是自己想的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权