首页 > 其他分享 >24. 解密犯罪时间

24. 解密犯罪时间

时间:2024-12-27 18:56:48浏览次数:6  
标签:24 11 数字 int 解密 start HH 时间 犯罪

题目描述

警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如“HH:MM”表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。

输入描述

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

输出描述

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

备注

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

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

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

用例

一、问题分析

首先读题,仔细看描述中的内容,发现需求是

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

2.根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,该时间为可能的犯罪时间。每个出现数字都可以被无限次使用。

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

4.输出描述:形如HH:SS的字符串,表示推理处理的犯罪事件。

5.备注:(1)可以保证线人给定的字符串一定是合法的。

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

二、解题思路

1.首先要看懂题目,题目的意思是说使用输入中给出的数字,构造一个距离输入时间最近的下一个时间

2.这个时间有可能是第二天。

3.首先明确HH的有效范围是00-23,SS的有效范围是00-59,

也就是说第一位数字可以是0,1,2,第二位数字在第一位数字是0和1的时候可以是0,1,2,3,4,5,6,7,8,9,在第一位数字是2的时候只能是0,1,2,3

第三位数字可以是0,1,2,3,4,5,第四位数字可以是0,1,2,3,4,5,6,7,8,9

4.所以我们可以从最后一位开始,比如时间是16:54分,我们查找1,6,5中有没有比4更大的中的数字最小的,找到了5,6,其中最小的是5所以我们下一个时间是16:55分

5.如果遇到12:34这种情况呢?1,2,3都比4小,那么我们就比较倒数第二位数字,我们要找到1,2,4中比三大的最小的数字,4刚好比3大,所以我们的下一个时间是12:4X分,X寻找1,2,3,4中最小的补充上就可以了,1最小,所以我们下一个时间是12:41分

6.如果是12:33分呢?后两位相同,且1,2都比3小,这个时候我们需要比较倒数第三位数字,发现3比2大,于是我们的时间变成了13:XX,XX选择1,2,3中比较小的补充上,于是我们的时间变成了13:11分

7.如果时间是13:33分呢?后三位都相同,1比3小,第一位数字又不能变成3。

这种情况下我们考虑下一个时间是下一天,所以我们比较的时间变成了00:00,我们直接用最小的数字补充上就行了11:11

因为第一个数字肯定是0,1,2,所以这三个数字可以填充在任何一个位置,而其他符合的数字一定比2小,如果在第一个数字后面有比第一个数字小的那么我们最近的时间就不需要是下一天了(比如21:59分,这里有比2小的1,但是因为在2后面,所以我们的下一个时间直接是22:11分就可以了)

8.所以我们只需要从后往前,找到比当前数字大的合法的数字是否出现在四个数字中,如果可以匹配上,那么剩下的后面的几位就填充上四个数中最小的数字就可以了

三、具体步骤

使用的语言是C

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int findminmatch(int a, int b, int c, int start, int end) {
    bool ba = false;
    bool bb = false;
    bool bc = false;
    if(a > start && a <= end) {
        ba =true;
        // printf("a > start and a <= end %d > %d and %d <= %d\n", a, start, a, end);
    }
    if(b > start && b <= end) {
        bb = true;
        // printf("b > start and b <= end %d > %d and %d <= %d\n", b, start, b, end);
    }
    if(c > start && c <= end) {
        bc = true;
        // printf("c > start and c <= end %d > %d and %d <= %d\n", c, start, c, end);
    }
    int minnum = 10;
    if(ba) {
        if(a < minnum) minnum = a;
        //printf("minnum is a = %d\n", a);
    }
    if(bb) {
        //printf("minnum is = %d\n", minnum);
        if(b < minnum) minnum = b;
        //printf("minnum is b = %d\n", minnum);
    }
    if(bc) {
        //printf("minnum is = %d\n", minnum);
        if(c < minnum) minnum = c;
        //printf("minnum is c = %d\n", minnum);
    }
    if(minnum == 10) return -1;
    else return minnum;
}

int findmin(int a, int b, int c, int d) {
    if(a <= b && a <= c && a <= d) return a;
    if(b <= a && b <= c && b <= d) return b;
    if(c <= a && c <= b && c <= d) return c;
    return d;
}

int main() {
    char cH1,cH2,cM1,cM2;
    int H3,H4,M3,M4;
    scanf("%c%c:%c%c", &cH1, &cH2, &cM1, &cM2);
    // 从最后一位开始查找,
    int H1 = cH1 - '0', H2 = cH2 - '0', M1 = cM1 - '0', M2 = cM2 - '0';
    int min = findmin(H1, H2, M1, M2);
    int last = findminmatch(H1 , H2, M1, M2, 9);
    
    if(last != -1) {
        H3 = H1;
        H4 = H2;
        M3 = M1;
        M4 = last;
        // printf("last test\n");
    } else {
        int secondl = findminmatch(H1, H2, M2, M1, 5);
        if(secondl != -1) {
            H3 = H1;
            H4 = H2;
            M3 = secondl;
            M4 = min;
        } else {
            int thirdl;
            if(H1 == 0 || H1 == 1) {
                thirdl = findminmatch(H1, M1, M2, H2, 9);
            } else {
                thirdl = findminmatch(H1, M1, M2, H2, 3);
            }
            if(thirdl != -1) {
                H3 = H1;
                H4 = thirdl;
                M3 = min;
                M4 = min;
            } else {
                int first = findminmatch(H2, M1, M2, H1, 2);
                if(first != -1) {
                    H3 = first;
                    H4 = min;
                    M3 = min;
                    M4 = min;
                } else {
                    H3 = min;
                    H4 = min;
                    M3 = min;
                    M4 = min;
                }
            }
            
        }
    }
    printf("%d%d:%d%d\n",H3,H4,M3,M4);
    return 0;
}

标签:24,11,数字,int,解密,start,HH,时间,犯罪
From: https://blog.csdn.net/bingw0114/article/details/143715823

相关文章

  • 2024-2025-1 20241318 《计算机基础与程序设计》第十四周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP(这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14这个作业的目标<学习《C语言程序设计》第13-14章并完成云班课测试>作业正文https://i.cnblogs.com/posts/......
  • 12.24随笔 java实战2019年考题(1)
    距离期末考试还有三天,我最后把建民老师发的2019年考题进行一次上手解答,看看自己大概能拿到多少分。先建表房产基本信息表CREATETABLEhouse_basic_info(house_idVARCHAR(20)PRIMARYKEY,room_typeENUM('四室两厅','四室一厅','三室两厅','三室一厅','两室两厅','两......
  • Pycharm 2024.3 安装详细教程与激活方法(附常见问题解决)
    Pycharm概述Pycharm是JetBrains公司推出的一款功能强大的Python集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本Pycharm如果您的电脑中已经安装了旧版本的......
  • 在北大的第一学期结课小记——2024.12.27
    本来是想昨天下午写的,因第一学期之课程在26日上午第四节课便已然完结,但却因个人的懒惰拖到了今日,我实在是罪无可恕,愿不要在接下来的期末复习上延续此般习气在开学初,本学期的选课方案可谓充满了妥协与权衡:为防掉课线代放弃了xsq,计概放弃了yhf,物院思修强制选课撞课位被迫放......
  • 【2024-12-27】被规划绑死了
    20:00与人共事,要学吃亏。                                                 ——左宗棠我们们公司今年安排了15天的年假,涵盖了中间的一些公休假期。其实,就算没有公司的......
  • 好用!盘点2024年性价比高的看板软件
    在盘点2024年性价比高的看板软件时,我们需要综合考虑软件的功能、易用性、价格以及用户评价等多个方面。以下是一些在市场上广受好评、性价比高的看板软件推荐:一、板栗看板●功能特点:板栗看板专注于国内市场,提供丰富的可视化模板,支持各种类型的数据展示,如KPI监控、销售数据、运......
  • Clion 2024.3完整版的安装教程(附激活,常见问题处理)
    卸载老版本Clion首先,如果小伙伴的电脑上有安装老版本的Clion,需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可):TIP:如果你之前使用过本站提供的 激活到2025年版本脚本,需要执行对应卸载脚本/适用2024版本/JetBrains2023最新全家桶/jetbra/scripts/uninstall-......
  • 2024国产最热门的AI工具大合集
    1、ChatGPT......
  • polarctf-crypto困难难度wp整理(截止至2024.12)
    分段解密加密脚本如下:importsysdefabc(First):First=c_uint32(First)returnFirstdefenflag(i,j):a=32tt=0x9e3779b9b=[0,0]First=abc(i[0])Second=abc(i[1])add=abc(0)add=add.valuewhile(a>0):......
  • 2024网络安全学习路线,最全保姆级教程,学完直接拿捏!
    CSDN独家网络安全资料包!点这里即可获取  关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人......