时钟

时钟

http://www.nowcoder.com/questionTerminal/72f3cc4658024d12bcc122c29b35394e

题解

题目难度:中等难度

知识点:字符串、数字、字典序

解释:字典序是指从前到后比较两个字符串的大小的方法。首先比较第一个字符,如果不同则第一个字符较小的字符串更小,如果相同则继续比较第2个字符......如此继续,来比较整个字符串的大小。

方法(一)

只要判断时分秒位是否大于23、59、59,如果大的话,就把高位置重置为0即可。将输入的字符串拆分为三部分,与最大值进行比较。高位置0,只需要将数学除以10取其余数即可,如79重置为79%10=09。

#include <iostream>
#include <string>
using namespace std;
int main(){
    int N;
    cin>>N;
    while(N>0){
        string str; 
        cin>>str;
        if(str.substr(0,2)>"23") str[0]='0';
        if(str.substr(3,2)>"59") str[3]='0';
        if(str.substr(6,2)>"59") str[6]='0';
        cout<<str<<endl;
        N--;
    }
    return 0;
}

方法(二)

将数据读入后,按位进行转换。
第1位0-2
第2位0-9【注】当第1位是0或1时,第二位可以取0-9任意;当第一位时2时,第二位只能取0-3。
第3位0-5
第4位0-9
第5位0-5
第6位0-9
当第1位取2,第2位>3时,可以是第1位不变,第2位置置0;也可以第1位置0,第2位不变。显然第2种方法字典序更小,除了这种情况,其他按位的范围取就可以。

#include<iostream>
using namespace std;
int main(){
    int N;
    cin>>N;
    while(N){
        int H1,H2,M1,M2,S1,S2;
        string str;
        cin>>str;
        H1 = str[0]-'0';
        H2 = str[1]-'0';
        M1 = str[3]-'0';
        M2 = str[4]-'0';
        S1 = str[6]-'0';
        S2 = str[7]-'0';
        if(H1>=3 ) H1=0;
        else if(H1==2 &&H2>3) H1=0;
        if(M1>5) M1=0;
        if(S1>5) S1=0;
        cout<<H1<<H2<<":"<<M1<<M2<<":"<<S1<<S2<<endl;
        N--;
    }
    return 0;
}
全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
贪食滴🐶:你说熟悉扣篮的底层原理,有过隔扣职业球员的实战经验吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-29 12:19
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务