小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
#include<bits/stdc++.h> #include<vector> #include<string.h> using namespace std; vector<string> split(string str,string pattern){ int pos; vector<string> vec; str += pattern; int len = str.length(); for(int i = 0;i<len;i++){ pos = str.find(pattern,i); if(pos < len){ string s = str.substr(i,pos-i); vec.push_back(s); i = pos + pattern.size()-1; } } return vec; } int getnum(char ch) { return ch-'0'; } int getnumber(string s){ // cout<<s<<endl; return getnum(s[0])*10+getnum(s[1]); } int main() { int _; cin>>_; cin.ignore(); while(_--){ vector<string> vec; string s; getline(cin,s); vec = split(s,":"); int a = getnumber(vec[0]); int b = getnumber(vec[1]); int c = getnumber(vec[2]); if(a>23)a%=10; if(b>59)b%=10; if(c>59)c%=10; cout<<setw(2)<<setfill('0')<<a; cout<<":"; cout<<setw(2)<<setfill('0')<<b; cout<<":"; cout<<setw(2)<<setfill('0')<<c; cout<<endl; } }