1 条题解

  • 0
    @ 2026-5-16 23:04:24

    1950C - 时钟转换 详细题解(标程版)

    核心规则(标程官方公式)

    24 小时制小时hh,分钟为 mm

    1. 转换为 12 小时制小时

    $$h_{12} = \begin{cases} 12 & h \bmod 12 = 0 \\ h \bmod 12 & \text{其他情况} \end{cases} $$

    2. 时段判断

    AM:0h11\text{AM}: \quad 0 \le h \le 11 PM:12h23\text{PM}: \quad 12 \le h \le 23

    3. 分钟不变

    m12=mm_{12} = m

    完整分类讨论(标程版)

    • h=00h = 00 → 输出 1212 AM
    • 01h1101 \le h \le 11 → 输出 hh AM
    • h=12h = 12 → 输出 1212 PM
    • 13h2313 \le h \le 23 → 输出 h12h-12 PM

    关键注意点

    1. 必须保留前导零,例如 11 → 输出 0101
    2. 分钟不变
    3. 00:xx00:xx12:xx12:xx AM
    4. 12:xx12:xx12:xx12:xx PM

    可直接提交 AC 标程(C++)

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main() {
        int t;
        cin >> t;
        while (t--) {
            int h, m;
            scanf("%d:%d", &h, &m);
            
            int nh = h % 12;
            if (nh == 0) nh = 12;
            
            if (h < 12) {
                printf("%02d:%02d AM\n", nh, m);
            } else {
                printf("%02d:%02d PM\n", nh, m);
            }
        }
        return 0;
    }
    

    题解总结

    • 公式:h12=h%12h_{12}=h\%12,为 00 则改为 1212
    • 小于 1212 是 AM,否则 PM
    • %02d 自动补前导零
    • 时间复杂度 O(t)O(t),完美通过所有数据

    需要我帮你对拍验证吗?

    • 1

    信息

    ID
    7142
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者