小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; } }
