题解:B4191 [海淀区小学组 2023] 回文时间
jnxx_zhuyueqi · · 题解
先警示一下后人:注意输入!这一点被卡了很久
思路
首先先分析这道题,让我们输出给定时间的下一个回文时间,那么就考虑暴力枚举,因为数据量很小。
解法
我们考虑进行枚举,搞一个循环,让分钟每次都加
注意这到题目的时间是循环的,即小时数如果超过了
因为回文时间就是小时数的十位与分钟数的个位相等,小时数的个位与分钟数的十位相等,就可以用 C++ 的整除来处理十位,取模运算处理个位。
输入与输出
强调一下:注意输入,注意输入,注意输入!输入里有个冒号! 我们可以用scanf来输入这个冒号,或者使用一个char来输入都是可以的。
输出这里可能需要补零,如果使用if来进行判断会使代码量增加许多,这就导致我懒得写而换一道题目做,那怎么办呢?我们可以用万能的printf,占位符使用%0nd就可以使输出不足
代码
没什么好说的,看注释。
#include<bits/stdc++.h> //万能头
using namespace std;
int h,m; //用来输入小时和分钟
bool check(int h,int m){ //check函数用来检查当前时间是否为回文时间
if(h/10==m%10&&h%10==m/10) return 1;
else return 0;
}
int main(){
scanf("%d:%d",&h,&m); //在%d占位符中间加上:可以避免读入的时候把冒号读到数字里
while(1){ //开始枚举
m++; //分钟加1
if(m==60) m=0,h++; //判断分钟数是否超过60,增加小时数
if(h==24) h=0; //判断小时数是否超过24
if(check(h,m)){ //检查是否满足要求
printf("%02d:%02d",h,m); //如果是,就输出答案
break; //然后跳出循环
}
}
return 0; //好习惯,在考场时千万不能不写,防止出现意外
}