首页 > 试题广场 >

时钟

[编程题]时钟
  • 热度指数:11868 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
注意:本题允许使用C/C++/Java/python进行解答,其他编程语言提交均视作无效处理。

W有一个电子时钟用于显示时间,显示的格式为HH:MM:SSHHMMSS分别表示时,分,秒。其中时的范围为[‘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

输出

19:00:23
23:59:59
我的应该是最简洁的了吧嘻嘻!我愿称正则表达式之为绝配!!(我是受前面那个万万没想到编辑的题有所感发的!)直接上代码吧!求点赞!!!😁
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int T=sc.nextInt();
        sc.nextLine();
        for(int i=0;i<T;i++){
            System.out.println(
                sc.nextLine().replaceFirst("^[3-9]","0").replaceFirst("^2([4-9])","0$1")
                .replaceAll("[6-9](\\d)","0$1"));
        }
    }
}



发表于 2020-02-27 21:38:00 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            char[] time = scanner.next().toCharArray();
            time[0] = (time[0] > '2' || (time[0] == '2' && time[1] > '3')) ? '0' : time[0];
            time[3] = (time[3] > '5') ? '0' : time[3];
            time[6] = (time[6] > '5') ? '0' : time[6];
            System.out.println(String.valueOf(time));
        }
    }
}
发表于 2019-07-12 10:12:43 回复(0)