2024华为OD机试真题- 解密犯罪时间-(C++/Python)-C卷D卷-100分

  2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++)  

题目描述

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

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

解密规则为:

利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。

输入描述

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

输出描述

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

备注

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

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

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

用例1

输入

20:12

输出

20:20

用例2

输入

23:59

输出

22:22

用例3

输入

12:58

输出

15:11

用例4

输入

18:52

输出

18:55

用例5

输入

23:52

输出

23:53

用例6

输入

09:17

输出

09:19

用例7

输入

07:08

输出

08:00

考点

全排列

题目解析

解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。本题重在理解“下一个”最近时间,因此要求的时间在当前时间之后,但也可能是第二天的时间。也就是说,要求的时间并不是严格比当前时间小的。

这题其实用dfs求全排列的话,就很简单。要满足时间格式,将所有时间升序排列后,取当前时间的下一个时间。

代码

c++
#include <bits/stdc++.h>
using namespace std;

vector<string> res; // 存全部时间的排列
void dfs(string str, int ind, string tmp) {
    if(tmp.size()==4) {
        int h=stoi(tmp.substr(0,2));
        int m=stoi(tmp.substr(2,2));
        if((h<=23) && m<=59) {
            res.push_back(tmp);
        }
        return ;
    }
    for(int i=ind;i<str.size();i++) {
        tmp+=str[i];
        dfs(str,ind,tmp);
        tmp=tmp.substr(0,tmp.size()-1);
    }
}

int main() {
    string str;
    cin>>str;
    string s;
    for(int i=0;i<str.size();i++) {
        if(str[i]!=':' && s.find(str[i])==s.npos) {
            s+=str[i];
        }
    }
   
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024剑指offer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值