看到一個頗有意思的話題——一天(24小時)內,時針和分針重合的次數。若是隻是想知道結果,最直接的辦法可能就是比劃一下,而後很快就可以知道答案。可是若是是要用算法代碼來完成的話就再也不那麼直接簡單了。
首先想一想時針分針存在什麼樣的關係,當分針轉動一圈時針轉1/60圈。相同時間x(分)內,分針會轉動s1=x/60圈,時針則會轉動s2=x/(60*12)圈,那麼他們重合即爲二者轉動的圈數的小數部分是相等的。由此可知 s1-(int)s1 = s2 - (int)s2 。而後能夠得出以下代碼:
可是輸出的結果倒是 count=3,分析一下,按照上面的方法只能獲得在整數分鐘上的重合次數,這並非咱們想要的結果,按照常識,分針時針重合不少都不是發生在整數分鐘上的,那麼能夠把咱們的循環間隔的1改得足夠小,那樣可能會獲得正確結果,可是足夠小是多小呢,這個無從得知,並且重合的位置多是一個無限小數,那麼咱們能夠換一種方式。
既然不能直接經過相等判斷,那麼咱們能夠判斷 上一次 的分針的偏移位置在時針前面 和 下一次分針的偏移位置在時針的後面 ,以此來肯定在這個過程當中分針和時針發生了重合,獲得如下代碼:
獲得輸出結果 count=20算法
這個也不是想要的結果,仔細查看代碼,發現代碼裏面只是比較了整數分鐘之間是否存在重合,忽略了整數分鐘上發生的重合。因而多加一個判斷判斷即可以了:學習
最後輸出結果 count=233d
後面發現,循環的間隔不須要是每分鐘,由於每次重合分針轉動都超過了一圈,那麼每一個重合點在錶盤上都會是大於5/60的距離,故可使用5分鐘的間隔進行循環:cdn
結果:count=23。blog
綜合,其中計算重合次數包括了開始的00:00和最後的24:00兩個時間點。it
最開始只是想知道一個結果,到底24小時時針和分針能夠重合多少次,到最後的一段代碼實現,整個過程實際上是十分有意思的,也許並非由於一個問題獲得解決,更重要的多是過程當中的學習和思考。
io