[編程題] 時鍾


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM