题解 | #时间(time)#
时间(time)
https://ac.nowcoder.com/acm/problem/16588
根据题意模拟即可,注意以下几点:
-
用
int
型存储,高位用x / 10
取出来,低位用x % 10
取出来。 -
判断回文时第一个数的高位和第二个数的低位相同,反之亦然。
-
向后枚举时碰到 就加一个
if
语句强制钦定成 即可。
#include<cstdio>
int init(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
void print(int x){
if (x < 0) x = -x, putchar('-');
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
bool check(int a, int b){
return (a / 10 == b % 10) && (a % 10 == b / 10);
}
int main(){
int a = init(), b = init();
for (int x = a, y = b; ; ) {
if (y == 0) y = 59, --x;
else --y;
if (check(x, y)) {
print(x), putchar(':'), print(y), putchar('\n');
break;
}
}
for (int x = a, y = b; ; ) {
if (y == 59) y = 0, ++x;
else ++y;
if (x == 24 && y == 0) x = 0;
if (check(x, y)) {
print(x), putchar(':'), print(y), putchar('\n');
break;
}
}
}