今日算法之_10_时分秒相遇
前言
Github:https://github.com/HealerJean
1、时分秒相遇
24小时内,时针和分针 一共重叠了几次,以及重叠的时间点
1.1、解题思路
脑海中想象,分针和时针的画面
从0点一开开始,有第1次重叠,0 点到 1 点,重叠 1 次…… ……,11点到12点,会发现没有重叠。那么这是在12个小时内的。12个小时重叠了11次,也就是说24小时会重叠22次
时分秒关系:
1小时 = 60 分钟 1小时 = 60 * 60 = 3600 秒
1分钟 = 60 秒
度数关系
时针:1小时 = 360/12 = 30度 ;
1分钟走 30度/60分钟 = 0.5度/分钟 ;
1秒钟走 30度/3600 = 0.5度/60秒
分针:1分钟 = 30/5 = 6度 ;
1秒钟走 6度/60秒
秒针 = 30/5 = 6度
1.2、算法
/**
题目:24小时内,时针和分针 一共重叠了几次,以及重叠的时间点
解题思路:
脑海中想象,分针和时针的画面
从0点一开开始,有第1次重叠,0 点到 1 点,重叠 1 次…… ……,11点到12点,会发现没有重叠。那么这是在12个小时内的。12个小时重叠了11次,也就是说24小时会重叠22次
时分秒关系:
1小时 = 60 分钟 1小时 = 60 * 60 = 3600 秒
1分钟 = 60 秒
度数关系
时针:1小时 = 360/12 = 30度 ;
1分钟走 30度/60分钟 = 0.5度/分钟 ;
1秒钟走 30度/3600 = 0.5度/60秒
分针:1分钟 = 30/5 = 6度 ;
1秒钟走 6度/60秒
秒针 = 30/5 = 6度
*/
public class 时分秒相遇 {
public static void main(String[] args) {
int count = 0;
for (int h = 1; h <= 12; h++) { //h是小时
for (int m = 0; m <= 60; m++) {//m是分针
double hDu = h * 30 + m * 0.5; // 时针一共走的度数 (从00.00开始走的度数)
double mDu = m * 6; // 分针走过的度数
//时针和分针相差的度数,重合的合时候的夹角不会超过一分钟走的6度
//我们可以自己脑子中想象,在每个小时内,时针永远在分针后面追赶时针。所以时针走的度数肯定比分针走的度数大
double hmDu = (hDu - mDu);
if (0 < hmDu && hmDu < 6.0) {
System.out.println(h + "小时:" + m + "分");
count++;
}
}
}
System.out.println("一共重叠" + count);
}
}
1.3、测试
1:5
2:10
3:16
4:21
5:27
6:32
7:38
8:43
9:49
10:54
11:59 //应该是12:00
13:5
14:10
15:16
16:21
17:27
18:32
19:38
20:43
21:49
22:54
23:59 应该是24:00
共重合:22次