蓝桥杯-爱代码爱编程
问题描述
在同一天中, 从上午 6 点 13 分 22 秒到下午 14 点 36 分 20 秒, 钟表上的 分针和秒针一共重合了多少次?
注意时针、分针、秒针都围绕中心敳匀速运动。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
最大运行时间:1s
最大运行内存: 512M
解题思路及代码
思路一:
使用LocalTime时在59分和59秒时会重叠一次,在整时会重叠一次
例如:11:59:59 12:00:00
也就是说一个小时会重叠两次,而题目要求是分钟和秒钟的重叠次数,故时钟,分钟,秒钟同时重叠的次数不算(这题还是有点咬文嚼字了,我说怎么比答案多了8次)
又因为早上6点到下午14点有8个小时,所以要在总次数上减去8
代码
import java.time.LocalTime;
public class 重合次数 {
public static void main(String[] args) {
//初始化时间
LocalTime localTime = LocalTime.of(6, 13, 22);
LocalTime localTime2 = LocalTime.of(14, 36, 20);
int count = 0;
while (localTime.isBefore(localTime2)) {//退出条件
if (localTime.getMinute() == localTime.getSecond()) {
count++;
}
localTime = localTime.plusSeconds(1);//秒数+1
}
System.out.println(count - 8);
}
}
思路二:
使用常规写法,这里的思路体现在处理边界问题上,在整时整分的重置问题做了调整
即:当等于61秒时再重置分钟,这样就可以避免整时整分整秒重复的问题了
代码
public class 重合次数 {
public static void main(String[] args) {
int hour = 6;
int min = 13;
int sec = 22;
int ans = 0;//记录重复次数
while (true) {
if (hour == 14 && min == 36 && sec == 20) {
break;
}
if (min == sec) {
ans++;
}
//当等于61秒时再重置分钟,这样就可以避免整时重复的问题了
if (sec > 60) {
min++;
sec = 1;//注意:这里重置分钟时是1, 而不是0
}
//同上
if (min > 60) {
hour++;
min = 1;
}
sec++;
}
System.out.println(ans);
}
}