www.kernel.org
分类: C/C++
2013-04-18 23:37:02
第一问简单,肯定是6次这没什么可说的。关键是第二问,求出它们相遇的时刻。确切的说,这道题考查的是程序设计的童子功:数学分析和运算能力。因为我们知道计算机和数学是不分家的,很多问题看似很复杂,其实本质上还不就那么点事儿。就像以前高考时,每次模拟考试,我们班主任总是不忘记叮嘱大家,一定要站在命题人的角度出发,想想他想考你们什么,然后才能得心应手,他管这个过程叫“破题能力”。OK,又扯远了。既然这道题目出现在程序员面试课堂里,那我们就来探究一下它究竟想考什么。
表盘共360度,一共分成60个刻度,所以每个刻度是6度,分针每转360度是1小时,时针才转30度。如下:
假如说,时针和分针起始时所成夹角为c度(本题中c=90),时针和分针相遇时他们各自分别走过了x度和y度,我们可以很容易的得出一个二元一次方程组:
c |
90 |
120 |
150 |
180 |
210 |
240 |
x |
8.18 |
10.91 |
13.64 |
16.37 |
19.09 |
21.82 |
y |
98.18 |
130.91 |
163.64 |
196.37 |
229.09 |
261.82 |
具体时刻 |
15:16 |
16:21 |
17:27 |
18:32 |
19:38 |
20:43 |
其中:
c |
90 |
120 |
150 |
180 |
210 |
240 |
x=c/11 |
8.18 |
10.91 |
13.64 |
16.36 |
19.09 |
21.82 |
y=12c/11 |
98.18 |
130.91 |
163.64 |
196.36 |
229.09 |
261.82 |
z=720c/11 |
129.6 |
294.5 |
100.8 |
259.2 |
64.8 |
230.4 |
具体时刻 |
15:16:21 |
16:21:49 |
17:27:16 |
18:32:43 |
19:38:10 |
20:43:38 |
当我想对这个结果进行验证时,被windows自带的时针着实给坑了一把。正常情况下,应该是秒针每走60度,分针就走1度;分针每走12度,时针就走1度。可它偏偏没这么设计,网上苦苦搜寻无果之后,哥们打算自己严格按照“国际标准”来自己写个带表盘的时钟,代码有些烂,不敢保证完全没有BUG,呵呵。感兴趣的童鞋可以从clock.zip下载源代码,我用qt写的。最后的验证结果如下: