题目
题目链接
解题思路
题目要求将12小时制时间转换为24小时制时间。需要注意以下规则:
- 12:00:00AM (午夜) -> 00:00:00
- 12:00:00PM (中午) -> 12:00:00
- 1:00:00PM - 11:59:59PM -> 13:00:00 - 23:59:59
- 1:00:00AM - 11:59:59AM -> 01:00:00 - 11:59:59
解题思路:
- 解析输入的时、分、秒和AM/PM标记
- 根据AM/PM进行相应转换:
- PM且不是12点,加12小时
- AM且是12点,改为0点
- 使用格式化输出确保两位数显示
代码
#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: # AMif hour == 12:hour = 0# 格式化输出
print(f"{hour:02d}:{minute:02d}:{second:02d}")
算法及复杂度
- 算法:字符串处理 + 条件判断
- 时间复杂度:\(\mathcal{O}(1)\) - 只需处理固定长度的时间字符串
- 空间复杂度:\(\mathcal{O}(1)\) - 只使用了常数个变量