查找模拟时钟中时针和分针之间的角度
最近我被问到这样一个面试问题:
给定一个 12 小时模拟时钟,计算时针和分针之间较小角度的度数。尽可能精确。
我想知道最简单、最易读、最精确的算法是什么。欢迎使用任何语言的解决方案(但如果您认为有必要,请稍微解释一下)。
I was given this interview question recently:
Given a 12-hour analog clock, compute in degree the smaller angle between the hour and minute hands. Be as precise as you can.
I'm wondering what's the simplest, most readable, most precise algorithm is. Solution in any language is welcome (but do explain it a bit if you think it's necessary).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
该问题被称为“时钟角度问题”,我们需要找到时钟之间的角度模拟时钟在特定时间的指针(小时和分钟)。
C 编程语言的解决方案。
在你的系统中编译上面的程序,我使用的是Ubuntu 18.04 LTS Bionic Beaver,你可以使用任何安装了C编译器的系统。
注释:
1. 等式 将为您提供 12 小时制时针所成的角度。
2. 如果要计算 24 小时制中时针所成的角度,请使用以下公式:
3. 秒针对分针的旋转也有贡献,但我们忽略了它,因为贡献很小,即1/10 = 0.1。
The problem is known as a “Clock Angle Problem” where we need to find the angle between the hands (hour & minute) of an analog clock at a particular time.
Solution in C Programming Language.
Compile the above program in your system, I used Ubuntu 18.04 LTS Bionic Beaver, you can use any system which has a C compiler installed.
Notes:
1. The equation will give you the angle made by hour hand in 12-hour clock.
2. If you want to calculate the angle made by hour hand in a 24-hour clock, then use the following equation:
3. Second hand also contribute to the rotation of the minute hand, but we ignored it because the contribution is insignificant i.e. 1/10 = 0.1.
这是一种解决方案 (C#)。这是一个非常简单的解决方案,忽略了精度。希望解决方案是不言自明的。
This is one solution (C#). This is a very simple solution and ignores precision. Hope the solution is self explanatory.
不知道这样对不对。?
I do not know if it's right, .something like this?
求时针和分针之间的角度是
for finding the angle between the hour hand and the minute hand is
事实证明,维基百科确实有最好的答案:
基本上:
0.5
度的速度移动6
度的速度移动每分钟问题已解决。
并且精度不是问题,因为小数部分是
.0
或.5
,并且在0..360
范围内,所有这些值都可以用double
精确表示。It turns out that Wikipedia does have the best answer:
Basically:
0.5
degrees per minute6
degrees per minuteProblem solved.
And precision isn't a concern because the fractional part is either
.0
or.5
, and in the range of0..360
, all of these values are exactly representable indouble
.为了找到时钟指针之间的角度,
For finding the angle between the hands of a clock is ,
Polygenlubricants的java代码与我的类似。假设时钟是 12 小时制而不是 24
小时制。如果是 24 小时制,那就另当别论了。另外,还有另一个假设,假设在我们计算时时钟是否停止。
一个时钟周期是360度。
分针每分钟可以走多少度? 360 / 60 = 每分钟 6 度。
时针每小时可以走多少度? 360/12 = 每小时 30 度(因为时针走得比分钟慢)
由于以“分钟”为单位更容易计算,我们可以得到
30 / 60 = 每分钟 0.5 度。
因此,如果您知道如何获得这些数字,那么问题就可以通过这个部分数学解决方案得到解决。
The java code that polygenlubricants is similar than mine. Let's assume that the clock is 12 hour instead of 24.
If it's 24 hours, then that's a different story. Also, another assumption, assume if the clock is stopped while we calculate this.
One clock cycle is 360 degree.
How many degree can the minute hand run per minute? 360 / 60 = 6 degree per minute.
How many degree can the hour hand run per hour? 360/12 = 30 degree per hour (since hour hand run slower than minute)
Since it's easier to calculate in the unit, "minute", let's get
30 / 60 = 0.5 degree per minute.
So, if you know how to get those numbers, the problem is pretty much solved with this partial mathematical solution.
试试这个代码:
Try this code :
分角(从 12 点钟开始):360 * 分钟 / 60
时角(从 12 点钟开始):360 * (小时 % 12) / 12 + 360 * (分钟 / 60) * (1 / 12)
小时和分钟之间的角度: (小时角度 - 分钟角度) % 360
通过简单的算术,这可以减少到 30 * 小时 - 5.5 * 分钟。
Minute angle (from 12 o’clock): 360 * minutes / 60
Hour angle (from 12 o’clock): 360 * (hour % 12) / 12 + 360 * (minutes / 60) * (1 / 12)
Angle between hour and minute: (hour angle - minute angle) % 360
By simple arithmetic, this reduces to 30 * hours - 5.5 * minutes.