题目描述:
/*
注意:本题允许使用C/C++/Java/python进行解答,其他编程语言提交均视作无效处理。
小W有一个电子时钟用于显示时间,
显示的格式为HH:MM:SS,HH,MM,SS分别表示时,分,秒。
其中时的范围为[‘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
输出例子1:
19:00:23
23:59:59
*/
思路如下:
对于HH或者MM或者SS都是两位的ab形式
只针对ab不合法情况:
a不是'0'的情况:
修改a就能能合法,那么把a修改到0即可
a是0的情况 b最多也就0-9肯定都在目前题目范围
代码如下:
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
using namespace std;
int main()
{
int T;
scanf("%d", &T);
int hh, mm, ss;
for(int i=0; i<T; i++){
scanf("%d:%d:%d", &hh, &mm, &ss);
if(hh<0 || mm<0 || ss<0)
return -1;
if(hh>=100 || mm>=100 || ss>=100)
return -2;
//hh mm ss都是两位正数
//处理hh
if(hh>23){
hh=hh%10;
}
//处理mm
if(mm>59){
mm=mm%10;
}
//处理ss
if(ss>59){
ss=ss%10;
}
printf("%02d:%02d:%02d\n", hh, mm, ss);
}
return 0;
}