1 条题解
-
0
📝 题目大意
给定一个整数 (),表示从 开始经过的分钟数。输出 小时制下经过 分钟后的时间,格式为
HH:MM,不足两位需补前导零。💡 解题思路
-
题目分析: 最大为 ,即最多经过 小时 分钟,最终时间不会超过 ,不会出现跨天的情况。因此直接对 时做加法即可,无需考虑日期进位。
-
算法推导:
- 设起点为 。
- 小时数
hour = 21 + K / 60:将 分钟换算为小时(整除 ),加到 上。 - 分钟数
minute = K % 60: 除以 的余数即为最终分钟数。 - 代码中
hour %= 24是兜底处理(虽然本题 不会触发),确保小时数始终在 范围内。 - 使用
setw(2)和setfill('0')控制输出宽度为 并用0填充,确保个位数前有前导零。
-
边界与细节:
- :输出
21:00,分钟和小时都不需要补零的特殊处理,setw(2)会自动补齐。 - :输出
22:00,分钟为 时需输出00而非0,setw(2)和setfill('0')保证了这一点。 - 注意使用
setfill后该流的状态会持续生效,不过本题只输出一次,不影响。
- :输出
⏱️ 复杂度分析
- 时间复杂度:,仅常数次运算。
- 空间复杂度:,仅使用几个变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ int K; cin >> K; // 读入经过的分钟数 K int hour = 21 + K / 60; // 起始 21 时 + 经过的小时数(K/60 向下取整) int minute = K % 60; // 剩余的分钟数 hour %= 24; // 兜底:防止小时数超过 23(本题 K≤100 不会触发) // 输出 HH:MM,setw(2) 设定宽度为 2,setfill('0') 用 '0' 填充不足位 cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << endl; return 0; } -
- 1
信息
- ID
- 622
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者