【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
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权