列表

详情


WY42. 时钟

描述

注意:本题允许使用C/C++/Java/python进行解答,其他编程语言提交均视作无效处理。

W有一个电子时钟用于显示时间,显示的格式为HH:MM:SSHHMMSS分别表示时,分,秒。其中时的范围为[‘00’,‘01’…‘23’],分的范围为[‘00’,‘01’…‘59’],秒的范围为[‘00’,‘01’…‘59’]

但是有一天小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;
}

上一题