੭ ᐕ)੭*⁾⁾889 2025-12-27 18:40 采纳率: 60%
浏览 9
已采纳

C++没思路不知道咋写

微博上有个自称“大钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当10”,而到了23:01就会是“当12”。在午夜00:00到中午12:00期间(端点时间包括在内),钟是不敲的。
下面就请你写个程序,根据当前时间替大钟敲钟。
输入格式:
输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。
输出格式:
根据当前时间替大钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:
Only hh:mm. Too early to Dang.
其中hh:mm是输入的时间。
输入样例1:
19:05
输出样例1:
Dang*8
输入样例2:
07:05
输出样例2:
Only 07:05. Too early to Dang.

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-12-27 18:41
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    根据题目要求,我们需要根据输入的时间来判断是否是“敲钟时间”,并输出相应的“Dang”数量。以下是详细的解决方案:


    一、问题分析

    1. 敲钟规则:

      • 如果当前时间正好是整点(如08:00),则“当”的数量等于小时数。
      • 如果当前时间过了整点(如08:01),则“当”的数量等于下一个整点数。
      • 例如:23:00 → Dang10;23:01 → Dang12。
      • 钟只在后半天(即从中午12:00到午夜24:00)敲钟,且只敲1~12下。
    2. 非敲钟期的条件:

      • 时间在00:00到12:00之间(包括端点),则不敲钟。

    二、解决思路

    1. 解析输入时间:

      • 将输入的hh:mm格式字符串拆分为小时和分钟。
    2. 判断是否为敲钟时间:

      • 如果时间在00:0012:00之间,则不敲钟。
      • 否则,进入敲钟逻辑。
    3. 计算敲钟次数:

      • 如果是整点(分钟为0),则敲钟次数为小时数。
      • 如果不是整点,则敲钟次数为下一小时数。
    4. 处理特殊范围:

      • 钟只在后半天敲1~12下,因此:
        • 如果当前小时在12时之后(如13:00),则敲钟次数为(当前小时 % 12)
        • 如果当前小时是12,则敲钟次数为12
        • 如果当前小时是01,则敲钟次数为12(因为钟只在后半天敲)。
    5. 输出结果:

      • 如果是敲钟时间,输出相应数量的Dang
      • 否则,输出提示信息。

    三、代码实现(C++)

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string input;
        cin >> input;
    
        // 解析输入时间
        int hh = stoi(input.substr(0, 2));
        int mm = stoi(input.substr(3, 2));
    
        // 判断是否为敲钟时间
        if (hh >= 0 && hh < 12) {
            cout << "Only " << input << ". Too early to Dang." << endl;
            return 0;
        }
    
        // 计算敲钟次数
        int next_hour = hh;
        if (mm > 0) {
            next_hour += 1;
        }
    
        // 处理后半天的敲钟规则(1~12)
        int dang_count = next_hour % 12;
        if (dang_count == 0) {
            dang_count = 12; // 例如12:00 -> 12次
        }
    
        // 输出结果
        for (int i = 0; i < dang_count; ++i) {
            cout << "Dang";
        }
        cout << endl;
    
        return 0;
    }
    

    四、测试样例说明

    输入样例1: 19:05

    • 当前时间是19:05,不是整点。
    • 下一小时是20点。
    • 20 % 12 = 8 → 敲8次。
    • 输出: Dang*Dang*Dang*Dang*Dang*Dang*Dang*Dang

    输入样例2: 07:05

    • 时间在07:05,属于00:00~12:00之间。
    • 输出: Only 07:05. Too early to Dang.

    五、注意事项

    • 输入格式必须严格为hh:mm,否则程序可能出错。
    • 程序中使用了% 12来确保只输出1~12次。
    • 如果当前时间是12:00,则直接输出12次“Dang”。

    六、总结

    • 关键点: 判断是否为敲钟时间、计算敲钟次数、处理后半天的规则。
    • 重点部分:
      • 判断是否为敲钟时间: if (hh >= 0 && hh < 12)
      • 计算敲钟次数: next_hour % 12,并处理特殊情况(如12:00)

    如果你还有其他疑问,欢迎继续提问!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 12月30日
  • 创建了问题 12月27日