【Java算法】一天24小时中,时针和分针一共重合多少次?

思路:利用时针与分针的夹角来计算。参考:上一篇文章

因为电子钟表,表针的跳动不是连续的,譬如分钟每次跳动6度,时针每次跳动0.5度。而编写程序时变量h小时,m分钟每次增量为1,所以我们设夹角gap为(-6~6之间)。这样带来另一个问题,一次重合接近和重合分开甚至是完全重合,最多可能出现3次夹角小于gap值。下面是Java实现代码。

package XiaoMi;

import java.util.Scanner;

public class test8 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		/*Scanner scan = new Scanner(System.in);
		String str = scan.nextLine();
		String s[] = str.split(":");
		int h, m;
		h = Integer.valueOf(s[0]);
		m = Integer.valueOf(s[1]);
		double gap = (30 * h - 5.5 * m) % 360;
		System.out.println("时针与分针的夹角为:" + gap);*/
		int count =0;
		for(int h=0; h<24; h++){
			for(int m=0; m<60; m++){
				double gap = (30 * h - 5.5 * m) % 360;
				if(-6.0 < gap && gap < 6.0){
				//if(-3.5 < gap && gap < 3.5){
					System.out.println(h + ":" + m);
					count++;
				}
			}
		}
		System.out.println("共重合:" + count +"次");
	}

}
运行结果:

0:0
0:1
1:5
1:6
2:10
2:11
3:16
3:17
4:21
4:22
5:27
5:28
6:32
6:33
7:38
7:39
8:43
8:44
9:49
9:50
10:54
10:55
11:59
12:0
13:5
14:10
15:16
16:21
17:27
18:32
19:38
20:43
21:49
22:54
23:59
共重合:35次
进一步分析结果,0点~10点阶段总计算两次接近重合,实际上为重合的接近与离开,故(-11);0:0与23:59也为同样情况,故(-1);11:59与12:0也为同样情况,故(-1)。 那么一共重合次数为:22次

接下来换个思路来讲:

由于时针1分钟旋转的圆心角度数为0.5度,分针1分钟旋转的圆心角度为6度,当两针第一次重合时后到第二次重合,分针比时针多旋转过的圆心角度数为360度,所以两针再次重合需要的时间为: 

  t=65+5/11 分,    

 这类问题实际上是分针追时针的追击问题,它的公式是:    t= s/(v1-v2) ,S=60(格),分针速度:V1=1 格/分,时针速度:V2= 1/12 格/分,所以,计算得到t=65+5/11 分,

     根据以上计算,每隔65+5/11 分时针和分针重合一次。     即,从12点开始,每经过65+5/11 分,时针与分针重合一次,    全天共重合 22次 。      一昼夜有24×60=1,440(分),所以两针一昼夜重合22(次)。

 重合次数=1440/(65+5/11)=22次  

 分述如下:   

1:(05+5/11)分→ 

 2:(10+10/11)分→  

3:(16+4/11)分→ 

 4:(21+9/11)分→ 

5:(27+3/11)分→ 

 6:(32+8/11)分→  

7:(38+2/11)分→  

8:(43+7/11)分→  

9:(49+1/11)分→  

10:(54+6/11)分→  

12:00分   可见,12个小时只重合了11次!

→   一天24小时,但是从下午开始到24点又重复了上午12小时的运转,所以下午也是和早上的12小时一样!

所以,11乘以2=22(次)。

能够发现在上面程序输出中,每次重合都比上次晚了65+5/11 分,即一小时零5分钟。如

1:5
2:10
3:16
验证了程序的正确性。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值