欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 + "次重合!");
	}
}

测试输出结果如下:

JAVA算法面试第三篇

以上代码仅供参考,如有不当之处,欢迎指出!!!

更多干货,欢迎大家关注和联系我。期待和大家一起更好的交流、探讨技术!!!

JAVA算法面试第三篇