JAVA算法面试第三篇
程序员文章站
2024-03-07 14:49:27
...
package com.algorithm;
/**
* 面试锦集:
*
* JAVA程序实现一天24小时时分秒重合次数
*
* @author 小辉GE/小辉哥
*
* 2019年8月1日 下午6:02:40
*/
public class HourMinuteSecondRepeatTimes {
public static void main(String[] args) {
// 一天总共的时间数(秒)
int totalSecond = 24 * 60 * 60;
// 首选分析问题如下:
// 秒针走完一圈需要的时间是60秒 = 60秒
// 分针走完一圈需要的时间是60分钟*60秒 == 60*60秒
// 时针走完一圈需要的时间是12小时*60分钟*60秒 == 12*60*60秒
// 假定每一个刻度周长为1,则每走一圈的周长为60(周长/时间=速度),时针、分针、秒针每秒速度可以直接得出(为了方便计算,在此处先同时把时针、分针、秒针的速度放大了720倍)
int hourV = 1, minuteV = 12, secondV = 720;
// 时针、分针、秒针对应时间刻度总共走的长度
int hourLength = 0, minuteLength = 0, secodLength = 0;
// 时钟周长
int circle = 60;
// 记录24小时总共重合的次数
int times = 0;
// 总共的时间范围
for (int i = 1; i <= totalSecond; i++) {
hourLength = hourV * i;
minuteLength = minuteV * i;
secodLength = secondV * i;
// 需要考虑可能会出现分钟、秒针已走完一圈或多圈情况,不能直接用长度相等比较,应该用取模比较
// 之前放大了720倍,这里时针、分针、秒针的总行程需要除以720
if ((hourLength / 720) % circle == (minuteLength / 720) % circle
&& (hourLength / 720) % circle == (secodLength / 720) % circle) {
times++;
// 得到重合的时间为i,然后转换成对应的时分秒
int h = i / 3600;
int m = (i - 3600 * h) / 60;
int s = i - 3600 * h - 60 * m;
System.out.println(h + ":" + m + ":" + s);
}
}
System.out.println("时针、分针、秒针一天共有" + times + "次重合!");
}
}
测试输出结果如下:
以上代码仅供参考,如有不当之处,欢迎指出!!!
更多干货,欢迎大家关注和联系我。期待和大家一起更好的交流、探讨技术!!!
上一篇: redirect_uri参数错误的解决方法(必看)
下一篇: mybatis框架入门学习教程