华为OD机试统一考试D卷C卷 - 解密犯罪时间

题目描述

警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如 “HH:MM” 表示的时刻。

根据警察和线人的约定,为了隐蔽,该时间是修改过的,

解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。

每个出现数字都可以被无限次使用。

输入描述

形如HH:SS字符串,表示原始输入。

输出描述

形如HH:SS的字符串,表示推理处理的犯罪时间。

备注

1.可以保证现任给定的字符串一定是合法的。

例如,“01:35”和“11:08”是合法的,“1:35”和“11:8”是不合法的。

2.最近的时刻可能在第二天。

用例

输入 输出
20:12 20:20
23:59 22:22
12:58 15:11
18:52 18:55
23:52 23:53
09:17 09:19
07:08 08:00

java

# 代码1
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 创建Scanner对象用于读取输入
        Scanner scanner = new Scanner(System.in);
        // 读取一行输入作为原始时间
        String input = scanner.next();
        // 打印出经过处理的下一个可能的犯罪时间
        System.out.println(findNextTime(input));
    }

    public static String findNextTime(String time) {
        // 解析字符串时间为小时和分钟
        int hours = Integer.parseInt(time.substring(0, 2));
        int minutes = Integer.parseInt(time.substring(3, 5));
        // 创建一个布尔数组,用于标记哪些数字是可用的
        boolean[] available = new boolean[10];
        // 遍历时间字符串中的每个字符,如果不是':',则标记对应的数字为可用
        for (char c : time.toCharArray()) {
            if (c != ':') {
                available[c - '0'] = true;
            }
        }

        // 初始化下一个可能的小时和分钟数为当前时间
        int nextHours = hours;
        int nextMinutes = minutes;
        // 循环直到找到一个符合条件的时间
        do {
            nextMinutes++; // 尝试下一个分钟数
            if (nextMinutes == 60) { // 如果分钟数达到60,归零并小时数加一
                nextMinutes = 0;
                nextHours++;
                nextHours %= 24; // 小时数达到24时归零
            }
        } while (!isValid(nextHours, nextMinutes, available)); // 检查当前尝试的时间是否有效

        // 返回格式化后的时间字符串
        return String.format("%02d:%02d", nextHours, nextMinutes);
    }

    private static boolean isValid(int hours, int minutes, boolean[] available) {
        // 将小时和分钟数分解为单独的数字
        int[] digits = {hours / 10, hours % 10, minutes / 10, minutes % 10};
        // 遍历每个

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

机试E卷D卷刷题日记 文章被收录于专栏

机试刷题记录

全部评论

相关推荐

11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务