前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

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 应该是2400
 共重合22

ContactAuthor