数据结构和算法:警察根据线人提供的加密时间破案
内卷之源:
暂无
题目描述:
* 线人提供加密的时间,警官需要解密。
* 实际时间在输入时间之后的最近的时间点。
* 一个数字可重复用多次,但不能无中生有。
*
* 备注:(1)输入由用例保证,不会出现类似1:35和01:5之类的输入
* (2)时间可能在第二天
测试用例:
| Input | Output |
| 01:35 | 01:50 |
| 23:59 | 22:22 |
| 22:59 | 22:22 |
| 23:45 | 23:52 |
| 19:34 | 19:39 |
| 18:52 | 18:55 |
| 20:12 | 20:20 |
| 06:58 | 08: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;
}
郑重提示:①解题思路非最优,覆盖条件可能不全,仅供练习参考。
②若有更佳思路或疑问,可在评论区留言相互讨论,不亦乐乎。
③本文不允许转载,若认可本文,可点赞收藏关注。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
