题目编号:L1-018 分数:10分 语言:Java、Python
题目描述
微博上有个自称"大笨钟V"的家伙,每天敲钟催促码农们爱惜身体早点睡觉。敲钟规则如下:
- 00:00 ~ 12:00(含端点):不敲
- 12:01 ~ 12:59:敲12下
- 13:00 ~ 23:59:
- 整点时:敲
(hour - 12)下 - 过了整点:敲
(hour - 11)下
- 整点时:敲
例如:19:05 → 8下,23:00 → 11下。
输入格式
输入第一行按照 hh:mm 的格式给出当前时间。hh 是小时(00到23),mm 是分钟(00到59)。
输出格式
如果是非敲钟期(00:00 ~ 12:00),输出:Only hh:mm. Too early to Dang.(注意:冒号后1空格,Too前2个空格)
如果是敲钟期(12:01 ~ 23:59),输出相应数量个 Dang(无空格连接)。
输入样例
19:05
输出样例
DangDangDangDangDangDangDangDang
解题思路
- 解析时分
- 判断时间段:
- 00:00 ~ 12:00(含):不敲,输出
Only hh:mm. Too early to Dang. - 12:01 ~ 12:59:敲12下
- 13:00 ~ 23:59:整点敲
(hour - 12)下,过了整点敲(hour - 11)下
- 00:00 ~ 12:00(含):不敲,输出
- 输出对应数量的 "Dang"
关键点:
- 12:01 ~ 12:59:敲12下(过了12点,敲12下)
- 13:00整点敲1下,14:00整点敲2下...
- 19:00整点敲7下,19:05过了整点敲8下 ✓
- 23:00整点敲11下 ✓
- 非敲钟期格式固定,注意2个空格
代码实现
Java 实现
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String time = sc.nextLine().trim();
String[] parts = time.split(":");
int hh = Integer.parseInt(parts[0]);
int mm = Integer.parseInt(parts[1]);
// 00:00 ~ 12:00(含)不敲
if (hh < 12 || (hh == 12 && mm == 0)) {
System.out.println("Only " + time + ". Too early to Dang.");
return;
}
int dangs;
if (hh == 12 && mm > 0) {
// 12:01~12:59 敲12下
dangs = 12;
} else {
// 13:00~23:59:整点敲 hour-12 下,过了整点敲 hour-11 下
dangs = (mm == 0) ? (hh - 12) : (hh - 11);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < dangs; i++) {
sb.append("Dang");
}
System.out.println(sb.toString());
}
}
Python 实现
time = input().strip()
hh, mm = map(int, time.split(':'))
# 00:00~12:00(含):不敲
if hh < 12 or (hh == 12 and mm == 0):
print(f"Only {time}. Too early to Dang.")
elif hh == 12 and mm > 0:
# 12:01~12:59:敲12下
print("Dang" * 12)
else:
# 13:00~23:59:整点(hour-12)下,过了整点(hour-11)下
dangs = hh - 12 if mm == 0 else hh - 11
print("Dang" * dangs)
运行验证
样例1: 输入 19:05
- hh=19, mm=5,过了整点
- dangs = 19 - 11 = 8 ✓
输出:DangDangDangDangDangDangDangDang ✓
样例2: 07:05
- hh=7 < 12,不敲
- 输出:
Only 07:05. Too early to Dang.✓
复杂度分析
- 时间复杂度:O(1)
- 空间复杂度:O(1)
总结
本题的关键在于理解大笨钟敲钟规则:
- 00:00~12:00(含)不敲
- 12:01~12:59:敲12下
- 13:00~23:59:整点敲
hour-12下,过了整点敲hour-11下 - 非敲钟期注意输出格式(含2个空格)