题解:洛谷 B4000 [GESP202406 一级] 休息时间 本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷B4000 [GESP202406 一级] 休息时间 - 洛谷【题目描述】小杨计划在某个时刻开始学习并决定在学习k kk秒后开始休息。小杨想知道自己开始休息的时刻是多少。【输入】前三行每行包含一个整数分别表示小杨开始学习时刻的时h hh、分m mm、秒s ssh hhm mms ss的值符合1 ≤ h ≤ 12 0 ≤ m ≤ 59 0 ≤ s ≤ 59 1≤h≤120≤m≤590≤s≤591≤h≤120≤m≤590≤s≤59)。第四行包含一个整数k kk、表示小杨学习的总秒数注k kk的值符合1 ≤ k ≤ 3600 1≤k≤36001≤k≤3600【输出】输出一行包含三个整数分别表示小杨开始休息时刻的时、分、秒。【输入样例】12 59 59 10【输出样例】13 0 9【核心思想】问题分析给定开始学习的时刻时h hh、分m mm、秒s ss和学习时长k kk秒求开始休息的时刻。这是一个时间单位转换问题核心在于将时分秒统一转换为秒进行计算再转换回时分秒格式。算法选择单位统一将时分秒全部转换为总秒数进行加法运算后再分解回时分秒取模分解利用除法和取模运算将总秒数分解为时、分、秒关键步骤读入数据读取h , m , s h, m, sh,m,s和k kk转换为总秒数n o w ← h × 3600 m × 60 s now \leftarrow h \times 3600 m \times 60 snow←h×3600m×60s加上学习时长n o w ← n o w k now \leftarrow now know←nowk分解回时分秒h h ← n o w / 3600 hh \leftarrow now / 3600hh←now/3600n o w ← n o w m o d 3600 now \leftarrow now \bmod 3600now←nowmod3600m m ← n o w / 60 mm \leftarrow now / 60mm←now/60s s ← n o w m o d 60 ss \leftarrow now \bmod 60ss←nowmod60输出结果h h , m m , s s hh, mm, sshh,mm,ss时间/空间复杂度时间复杂度O ( 1 ) O(1)O(1)空间复杂度O ( 1 ) O(1)O(1)时间单位转换的核心思想统一单位简化运算将复杂的多单位时间转换为单一单位秒避免时分秒分别进位的繁琐判断将问题转化为简单的整数加法除法与取模的分解利用1 11小时 3600 36003600秒、1 11分钟 60 6060秒的进制关系通过整数除法提取高位单位取模运算保留低位单位实现从总秒数到时分秒的精确分解12小时制的隐含处理题目中h ∈ [ 1 , 12 ] h \in [1, 12]h∈[1,12]但输出样例显示12 : 59 : 59 10 12:59:59 1012:59:5910秒 13 : 00 : 09 13:00:0913:00:09说明采用连续计时而非12小时循环输出可超过12适用于多单位量的统一转换与分解类基础问题【算法标签】#入门 #语法基础【代码详解】#includebits/stdc.husingnamespacestd;intmain(){inth,m,s;// 当前时间时、分、秒cinhms;// 输入当前时间intk;// 要增加的秒数cink;// 输入增加的秒数// 将当前时间转换为总秒数intnowh*60*60m*60s;// 加上k秒nowk;// 计算新的时分秒inthhnow/3600;// 时 总秒数 ÷ 3600now%3600;// 剩余的秒数intmmnow/60;// 分 剩余秒数 ÷ 60now%60;// 剩余的秒数intssnow;// 秒 剩余秒数// 输出结果couthh mm ssendl;return0;}【运行详解】12 59 59 10 13 0 9