文章

【GESP】C++一级真题(202406)luogu-B4000,休息时间

2024年6月GESP一级真题。又是时间计算类问题。

luogu-B4000

题目要求

描述

小杨计划在某个时刻开始学习,并决定在学习 k 秒后开始休息。

小杨想知道自己开始休息的时刻是多少。。

输入

前三行每行包含一个整数,分别表示小杨开始学习时刻的时 h、分 m、秒 s(h,m,s 的值符合 1<h≤12,0≤m≤59,0≤s≤59)。

第四行包含一个整数 k,表示小杨学习的总秒数(注:k 的值符合 1≤k≤3600)。

输出

输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。

输入样例-1

12
59
59
10

输出样例-1

13 0 9


题目分析

又是时间计算问题,直接做过类似的问题luogu-B3847,当天的第几秒,思路也类似

  • 统一转换时间用秒表示
  • 用秒相加得到最后休息时间的秒数
  • 将秒数转换成时间表示

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main() {
    // 定义变量a, b, c, d来存储输入的时、分、秒和学习时间
    int a, b, c, d;
    // 从标准输入流中读取时、分、秒和学习时间
    cin >> a >> b >> c >> d;
    // 将时、分、秒转换为总秒数
    int n = a * 3600 + b * 60 + c;
    // 计算学习后休息的总秒数
    int i = n + d;
    // 输出休息时刻的时、分、秒
    cout << i / 3600 << " " << i % 3600 / 60 << " " << i % 3600 % 60;
    return 0;
}

另外一种思路,相对复杂但是计算直接,孩子缺乏算法思维总会直接想到最直接的计算,处理时、分、秒的进位即可,不推荐,易出错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
int main() {
    // 定义变量h, m, s, k来存储输入的时、分、秒和学习时间
    int h, m, s, k;
    // 从标准输入流中读取时、分、秒和学习时间
    cin >> h >> m >> s >> k;
    // 将学习时间转换为小时数并加到h中
    h +=  k / 3600;
    // 计算学习时间剩余的秒数
    int last = k % 3600;
    // 将剩余秒数转换为分钟数并加到m中
    m += last /60;
    // 计算剩余的秒数
    last = last % 60;
    // 将剩余秒数加到s中
    s += last;
    // 如果秒数超过60,则进位到分钟
    if (s >= 60) {
        m++;
        s -= 60;
    }
    // 如果分钟数超过60,则进位到小时
    if (m >= 60) {
        h++;
        m -= 60;
    }
    // 输出休息时刻的时、分、秒
    cout << h << " " << m << " " << s;
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

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

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