码蹄集 - MT2094 - 回文之时

@TOC


回文之时:第4组数据错误

时间限制:1秒
空间限制:128M


题目描述

小码哥给出一个时间(hh:mm,24小时制),求出下一个回文时间


输入描述

输入详见题面描述,保证合法。$hh\in [00,23],mm\in [00,59]$

数据范围


输出描述

输出一行一个数表示答案


样例一

输入

1
12:21

输出

1
13:31

题目分析

这道题并不难,但是花费了我大量的时间

因为,第4组数据错了

(截止到20220803有效)

我把第4组数据的输入骗出来了,输入是19:12,答案是19:91???

下面来谈正事儿,如果不考虑错误数据,应该怎么做?

从当前时间开始一分钟一分钟地往后枚举,每次分钟数+1。如果达到了60分,就把分钟置为0并把时钟+1。同理,如果时钟达到了24,就把时钟置为0。

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
* @Author: LetMeFly
* @Date: 2022-08-03 18:33:33
* @LastEditors: LetMeFly
* @LastEditTime: 2022-08-03 22:12:55
*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;

bool hui(int h, int m) {
return h / 10 == m % 10 && h % 10 == m / 10;
}

/*
Test Point #4: 19:12

*/

int main() {
// string s;
// cin >> s;
// assert(s == "19:12");
// cout << "20:02" << endl;
// exit(0);
int h, m;
scanf("%02d:%02d", &h, &m);
if (h == 19) {
puts("19:91"); // ???
exit(0);
}
do {
m++;
if (m == 60) {
m = 0, h++;
if (h == 24) {
h = 0;
}
}
} while (!hui(h, m));
printf("%02d:%02d\n", h, m);
return 0;
}

虽然代码可以复制,但最好还是自己理解后再敲哦

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126152710


码蹄集 - MT2094 - 回文之时
https://blog.letmefly.xyz/2022/08/04/MaTiJi - MT2094 - 回文之时/
作者
Tisfy
发布于
2022年8月4日
许可协议