WY42. 时钟
描述
但是有一天小W发现钟表似乎坏了,显示了一个不可能存在的时间“98:23:00”,小W希望改变最少的数字,使得电子时钟显示的时间为一个真实存在的时间,譬如“98:23:00”通过修改第一个’9’为’1’,即可成为一个真实存在的时间“18:23:00”。修改的方法可能有很多,小W想知道,在满足改变最少的数字的前提下,符合条件的字典序最小的时间是多少。其中字典序比较为用“HHMMSS”的6位字符串进行比较。
输入描述
每个输入数据包含多个测试点。每个测试点后有一个空行。 第一行为测试点的个数T(T<=100)。 每个测试点包含1行,为一个字符串”HH:MM:SS”,表示钟表显示的时间。输出描述
对于每个测试点,输出一行。如果钟表显示的时间为真实存在的时间,则不做改动输出该时间,否则输出一个新的”HH:MM:SS”,表示修改最少的数字情况下,字典序最小的真实存在的时间。示例1
输入:
2 19:90:23 23:59:59
输出:
19:00:23 23:59:59
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-13
#include<stdio.h> #include<stdlib.h> #pragma warning (disable:4996) int main(void) { int T; scanf("%d", &T); int max = T; int **time; time = (int**)malloc(max * sizeof(int*)); for (int i = 0; i < max; i++) { time[i] = (int*)malloc(3 * sizeof(int)); } int HH = 0, MM = 0, SS = 0; while (T--) { scanf("%d:%d:%d", &HH, &MM, &SS); if (HH > 23) HH = HH % 10; if (MM > 59) MM = MM % 10; if (SS > 59) SS = SS % 10; time[max - T - 1][0] = HH; time[max - T - 1][1] = MM; time[max - T - 1][2] = SS; printf("%02d:%02d:%02d\n", time[max - T - 1][0], time[max - T - 1][1], time[max - T - 1][2]); } for (int i = 0; i < max; i++) { free(time[i]); } free(time); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2018-08-09
#include <stdio.h> int main() { char time[9]; int h,m,s; int T; scanf("%d",&T); getchar(); while (T--) { scanf("%s",time); h = (time[0]-'0')*10 + (time[1]-'0'); m = (time[3]-'0')*10 + (time[4]-'0'); s = (time[6]-'0')*10 + (time[7]-'0'); if (h>=24)time[0]='0'; if (m>59)time[3]='0'; if (s>59)time[6]='0'; printf("%c%c:%c%c:%c%c\n",time[0],time[1],time[3],time[4],time[6],time[7]); } return 0; }