一天之内分针与时针相遇多少次

有一道面试题:用程序求出一天之内分针与时针相遇多少次。
先来分析一下:
设分针的角速度为大V,时针的角速度为小v,那么它们相遇时一定满足以下条件:
V*t = v*t + 360°*n
其中n为0到无穷大的整数
如果t以小时为单位,那么 V=360°/h,v=30°/h,进而得出:
360*t = 30*t + 360*n
360*t - 30*t = 360*n
330*t = 360*n
t = 360*n/330

而t要满足大于等于0,小于23,所以可用以下代码(以js为例)实现:
var count = 0;
var time = 24;
for(var n=0; n<100000; n++){
  if(360*n/330>=time){ 
    break;
  }
  count++;
}
console.log(time+"小时内时针分针相遇:"+count+"次");
输出结果:
  • "24小时内时针分针相遇:22次"


如果需要得出在什么时刻相遇,只需要如下处理:

var count = 0;
var time = 24;
for(var n=0; n<100000; n++){
  var tmpTime = 360*n/330;//
  if(tmpTime>=time){ 
    break;
  }
  console.log("第"+tmpTime+"时时针分针相遇第"+(n+1)+"次");
  count++;
}
console.log(time+"小时内时针分针相遇:"+count+"次");

输出结果:

"第0时时针分针相遇第1次"
"第1.0909090909090908时时针分针相遇第2次"
"第2.1818181818181817时时针分针相遇第3次"
"第3.272727272727273时时针分针相遇第4次"
"第4.363636363636363时时针分针相遇第5次"
"第5.454545454545454时时针分针相遇第6次"
"第6.545454545454546时时针分针相遇第7次"
"第7.636363636363637时时针分针相遇第8次"
"第8.727272727272727时时针分针相遇第9次"
"第9.818181818181818时时针分针相遇第10次"
"第10.909090909090908时时针分针相遇第11次"
"第12时时针分针相遇第12次"
"第13.090909090909092时时针分针相遇第13次"
"第14.181818181818182时时针分针相遇第14次"
"第15.272727272727273时时针分针相遇第15次"
"第16.363636363636363时时针分针相遇第16次"
"第17.454545454545453时时针分针相遇第17次"
"第18.545454545454547时时针分针相遇第18次"
"第19.636363636363637时时针分针相遇第19次"
"第20.727272727272727时时针分针相遇第20次"
"第21.818181818181817时时针分针相遇第21次"
"第22.90909090909091时时针分针相遇第22次"
"24小时内时针分针相遇:22次"



还有的题目要求算出一天之内分针与时针垂直的次数有多少,
那么同理可以分析得出:
当分针与时针垂直时一定满足以下条件:
V*t = v*t + 360°*n + 90°
所以
360*t = 30*t + 360*n + 90
360*t-30*t = 360*n + 90
330*t = 360*n + 90
t = (360*n+90)/330

var count=0;
var time = 24;
for(var n=0; n<100000; n++){
  if((360*n+90)/330>=time){
    break;
  }
  count++;
}
console.log(time+"小时内时针分针垂直:"+count+"次");

输出结果:

  • "24小时内时针分针垂直:22次"

你可能感兴趣的:(垂直,一天,相遇,时针,分针)