解题思路

题目要求将12小时制时间转换为24小时制时间。需要注意以下规则:

  1. 12:00:00AM (午夜) -> 00:00:00
  2. 12:00:00PM (中午) -> 12:00:00
  3. 1:00:00PM - 11:59:59PM -> 13:00:00 - 23:59:59
  4. 1:00:00AM - 11:59:59AM -> 01:00:00 - 11:59:59

解题思路:

  1. 解析输入的时、分、秒和AM/PM标记
  2. 根据AM/PM进行相应转换:
    • PM且不是12点,加12小时
    • AM且是12点,改为0点
  3. 使用格式化输出确保两位数显示

代码

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int hour, minute, second;
    char meridiem[3];
    
    scanf("%d:%d:%d%s", &hour, &minute, &second, meridiem);
    
    // 处理PM情况
    if (strcmp(meridiem, "PM") == 0) {
        if (hour != 12) hour += 12;
    }
    // 处理AM情况
    else {
        if (hour == 12) hour = 0;
    }
    
    // 格式化输出
    printf("%02d:%02d:%02d\n", hour, minute, second);
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String time = sc.nextLine();
        
        // 解析时间
        int hour = Integer.parseInt(time.substring(0, 2));
        int minute = Integer.parseInt(time.substring(3, 5));
        int second = Integer.parseInt(time.substring(6, 8));
        String meridiem = time.substring(8);
        
        // 转换时间
        if (meridiem.equals("PM")) {
            if (hour != 12) hour += 12;
        } else {
            if (hour == 12) hour = 0;
        }
        
        // 格式化输出
        System.out.printf("%02d:%02d:%02d\n", hour, minute, second);
    }
}
time = input()

# 解析时间
hour = int(time[0:2])
minute = int(time[3:5])
second = int(time[6:8])
meridiem = time[8:]

# 转换时间
if meridiem == "PM":
    if hour != 12:
        hour += 12
else:  # AM
    if hour == 12:
        hour = 0

# 格式化输出
print(f"{hour:02d}:{minute:02d}:{second:02d}")

算法及复杂度

  • 算法:字符串处理 + 条件判断
  • 时间复杂度: - 只需处理固定长度的时间字符串
  • 空间复杂度: - 只使用了常数个变量