专栏文章
题解:B4191 [海淀区小学组 2023] 回文时间
B4191题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miq1kumz
- 此快照首次捕获于
- 2025/12/03 21:27 3 个月前
- 此快照最后确认于
- 2025/12/03 21:27 3 个月前
先警示一下后人:注意输入!这一点被卡了很久
思路
首先先分析这道题,让我们输出给定时间的下一个回文时间,那么就考虑暴力枚举,因为数据量很小。
解法
我们考虑进行枚举,搞一个循环,让分钟每次都加 ,如果分钟数到达了 ,就把分钟数归零,同时小时数加一。
注意这到题目的时间是循环的,即小时数如果超过了 也要归零。最后每次都检查一下,是否为回文时间。如果找到了答案就输出结果并跳出循环。
因为回文时间就是小时数的十位与分钟数的个位相等,小时数的个位与分钟数的十位相等,就可以用 C++ 的整除来处理十位,取模运算处理个位。
输入与输出
强调一下:注意输入,注意输入,注意输入!输入里有个冒号! 我们可以用
scanf来输入这个冒号,或者使用一个char来输入都是可以的。输出这里可能需要补零,如果使用这就导致我懒得写而换一道题目做,那怎么办呢?我们可以用万能的
if来进行判断会使代码量增加许多,printf,占位符使用%0nd就可以使输出不足 位的就往前面补零,这样就很好的解决了这个问题。代码
没什么好说的,看注释。
CPP#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; //好习惯,在考场时千万不能不写,防止出现意外
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...