L1-018 大笨钟(10分)[java][python]

0 阅读3分钟

题目编号: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

解题思路

  1. 解析时分
  2. 判断时间段:
    • 00:00 ~ 12:00(含):不敲,输出 Only hh:mm. Too early to Dang.
    • 12:01 ~ 12:59:敲12下
    • 13:00 ~ 23:59:整点敲 (hour - 12) 下,过了整点敲 (hour - 11)
  3. 输出对应数量的 "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)

总结

本题的关键在于理解大笨钟敲钟规则:

  1. 00:00~12:00(含)不敲
  2. 12:01~12:59:敲12下
  3. 13:00~23:59:整点敲 hour-12 下,过了整点敲 hour-11
  4. 非敲钟期注意输出格式(含2个空格)