数据结构和算法:警察根据线人提供的加密时间破案

内卷之源:

暂无

题目描述:

 * 线人提供加密的时间,警官需要解密。
 * 实际时间在输入时间之后的最近的时间点。
 * 一个数字可重复用多次,但不能无中生有。
 * 
 * 备注:(1)输入由用例保证,不会出现类似1:35和01:5之类的输入
 *              (2)时间可能在第二天

测试用例:

InputOutput
01:3501:50
23:5922:22
22:5922:22
23:4523:52
19:3419:39
18:5218:55
20:1220:20
06:5808:00

思路分析:

真实时间在输入时间之后,数字可重复用多次,因此将组成时间的四个数字拆开,两两组合,最多16种,然后从中选出大于输入的时间组合即可。但要注意:H∈[00,23],M∈[00,59]

编程实现(C++):

/************************************************************** @author    SLF* @version	  V1.0.0* @date      05-Jul-2021*************************************************************/
#include 
#include 
#include 
#include  //sortusing namespace::std;int main(void)
{int H, M; //小时、分钟int split[4] = {0};// array H_M_gen_stl = {0};int H_M_gen[16] = {0}; //将24小时制的四个数字重新组成两位数int H_M_gen_num = 0;scanf("%d:%d", &H, &M);split[0] = H/10;split[1] = H%10;split[2] = M/10;split[3] = M%10;//generatefor(int i = 0, j = 0, t = 0; 4 > i; ++i){if(5 < (t = split[i])) //分钟显示不超过59{continue;}for(j = 0; 4 > j; ++j){H_M_gen[H_M_gen_num] = 10*t + split[j];// H_M_gen_stl[H_M_gen_num] = 10*t + split[j];++H_M_gen_num;}}// sort(H_M_gen_stl.begin(), H_M_gen_stl.begin() + H_M_gen_num);//select sortint inx_min = 0;bool exchg = false;for(int i = 0, j = 0, t = H_M_gen_num - 1; t > i; ++i){inx_min = j = i;while(H_M_gen_num > (++j)){if(H_M_gen[inx_min] > H_M_gen[j]){inx_min = j;exchg = true;}}if(exchg){exchg = false;swap(H_M_gen[inx_min], H_M_gen[i]);}}//decrypt crime timeif((23 == H) && (H_M_gen[H_M_gen_num -1] == M)){//若H是23时,且M是最大分钟数,则次日最早时间cout << setfill('0') << setw(2) << H_M_gen[0] << ":" << setw(2) << H_M_gen[0] << endl; //排序后第一个数绝对小于23// printf("%02d:%02d\n", H_M_gen[0], H_M_gen[0]);return 0;}for(int i = 0; H_M_gen_num > i; ++i){//基于H,判断Mif(M < H_M_gen[i]){cout << setfill('0') << setw(2) << H << ":" << setw(2) << H_M_gen[i] << endl;return 0;}}//相同H,M最大//下一个最小时间组合for(int i = 0, t = H_M_gen_num - 1; H_M_gen_num > i; ++i){if((24 > H_M_gen[i]) && (H < H_M_gen[i])){cout << setfill('0') << setw(2) << H_M_gen[i] << ":" << setw(2) << H_M_gen[0] << endl;return 0;}if(t == i) //次日{cout << setfill('0') << setw(2) << H_M_gen[0] << ":" << setw(2) << H_M_gen[0] << endl;return 0;}}return 0;
}

  

郑重提示:​​​​​​​①解题思路非最优,覆盖条件可能不全,仅供练习参考。

                  ②若有更佳思路或疑问,可在评论区留言相互讨论,不亦乐乎。

                  ③本文不允许转载,若认可本文,可点赞收藏关注。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部