PTA基础编程题目集 7-7 12-24小时制(C++语言实现)
摘要本文是PTA编程题12-24小时制的题解涵盖题目描述、输入输出格式及C语言实现展示24小时制时间到12小时制时间的转换逻辑与带分隔符的输入处理方法。题目描述编写一个程序要求用户输入24小时制的时间然后显示12小时制的时间。输入格式输入在一行中给出带有中间的:符号半角的冒号的24小时制的时间如12:34表示12点34分。当小时或分钟数小于10时均没有前导的零如5:6表示5点零6分。提示在scanf的格式字符串中加入:让scanf来处理这个冒号。输出格式在一行中输出这个时间对应的12小时制的时间数字部分格式与输入的相同然后跟上空格再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意在英文的习惯中中午12点被认为是下午所以24小时制的12:00就是12小时制的12:0 PM而0点被认为是第二天的时间所以是0:0 AM。输入样例21:11输出样例9:11 PM解题思路核心问题分析本题需要完成两个核心任务一是正确读取带有冒号分隔符的时间输入二是根据24小时制到12小时制的转换规则进行分支判断输出。关键边界点在于0点、12点这两个特殊时间点的处理。算法原理说明带分隔符输入处理使用scanf(%d:%d, hour, minute)可以直接处理冒号分隔格式字符串中的:会自动匹配并跳过输入中的冒号字符。时间转换规则分4种情况hour 0凌晨0点 → 输出0:分钟 AM0 hour 12上午 → 直接输出小时:分钟 AMhour 12中午12点 → 输出12:分钟 PMhour 12下午 → 小时减12输出(hour-12):分钟 PM具体计算步骤读入小时和分钟处理冒号分隔。按上述4种情况进行分支判断。按判断结果输出转换后的时间和AM/PM标识。代码部分实现#includeiostream#includecstdiousingnamespacestd;intmain(){inthour,minute;scanf(%d:%d,hour,minute);if(hour0){cout0:minute AM;}elseif(hour12){couthour:minute AM;}elseif(hour12){cout12:minute PM;}else{couthour-12:minute PM;}return0;}代码流程说明引入头文件引入iostream提供标准输出功能引入cstdio提供scanf函数用于处理带冒号的输入。使用命名空间using namespace std;简化代码。定义变量hour和minute均为int类型分别存储小时和分钟。读取输入scanf(%d:%d, hour, minute);使用格式字符串中的冒号自动匹配并跳过输入中的冒号将小时存入hour、分钟存入minute。分支判断转换情况1hour 0→ 输出0:分钟 AM凌晨零点情况2hour 12且不等于0 → 直接输出小时:分钟 AM上午时段情况3hour 12→ 输出12:分钟 PM中午12点算下午情况4hour 12→ 小时减12后输出(hour-12):分钟 PM下午1点到11点程序结束return 0;表示程序正常终止。代码流程图是否是否是否开始引入iostream和cstdio头文件使用std命名空间定义hour和minute为int变量scanf %d:%d 读取hour和minutehour 0?输出 0:minute AMhour 12?输出 hour:minute AMhour 12?输出 12:minute PM输出 hour-12:minute PMreturn 0结束解题流程图是否理解题目要求24小时制→12小时制转换分析输入格式冒号分隔 无前置零分析输出格式数字同输入 空格 AM/PM梳理特殊边界点0点→0:0 AM12点→12:0 PM确定4种判断分支0 / 1~11 / 12 / 13~23选择scanf %d:%d处理冒号输入编写分支判断逻辑编写完整代码验证边界样例0:0, 12:0, 21:11等输出是否正确?完成检查分支条件与输出格式