在模拟时钟中查找小时和分针之间的角度

pol*_*nts 33 math floating-point precision angle

我最近接受了这个采访问题:

给定12小时模拟时钟,以度为单位计算小时和分针之间的较小角度.尽你所能精确.

我想知道什么是最简单,最可读,最精确的算法.欢迎使用任何语言的解决方案(但如果您认为有必要,请稍微解释一下).

pol*_*nts 43

事实证明,维基百科确实有最好的答案:

// h = 1..12, m = 0..59
static double angle(int h, int m) {
    double hAngle = 0.5D * (h * 60 + m);
    double mAngle = 6 * m;
    double angle = Math.abs(hAngle - mAngle);
    angle = Math.min(angle, 360 - angle);
    return angle;
}
Run Code Online (Sandbox Code Playgroud)

基本上:

  • 时针以0.5每分钟度数的速度移动
  • 分针以6每分钟度数的速度移动

问题解决了.


并且精度不是问题,因为小数部分是.0或者.5,并且在0..360所有这些值的范围内,可以精确地表示double.

  • @starblue模拟时钟可以24小时吗? (17认同)

小智 8

为了找到时钟之间的角度,

30 * [HRS - (MIN/5)] + (MIN/2) 
Run Code Online (Sandbox Code Playgroud)


小智 5

polygenlubricants的类似于我的java代码.我们假设时钟是12小时而不是24小时.

如果是24小时,那就是另一回事了.此外,另一个假设,假设我们在计算时停止时钟.

一个时钟周期为360度.

  1. 分针每分钟可以运行多少度?360/60 =每分钟6度.

  2. 每小时可以运行多少度?360/12 =每小时30度(因为时针比分钟慢)

因为它更容易在单位计算,"分钟",让我们得到

"每小时可以运行多少度?"

30/60 =每分钟0.5度.

所以,如果你知道如何获得这些数字,那么问题就在于解决方案.