兩隻烏龜,分別叫A和B,在進行賽跑。
A以720英尺每小時的速度前進。
年輕的B知道A比它肯定跑得慢,所以還在不慌不忙地吃著蔬菜。
當B開始跑動的時候,它發現A已經領先了70英尺了,但B的速度是850英尺每小時,所以它肯定能趕上。
請問,B趕上A,多長的時間?
更通用的情況:給定兩個速度v1(A的速度,>0的整數),v2(B的速度,>0的整數),還有個領先差距g(g>0),B得花多長時間趕上A?
結果應該是個數組,[h, mn, s],h,mn,s代表時分秒。
如果出現異常情況,比如說v1 >= v2,這樣B永遠趕不上A,那麼直接回傳null。
例如:
race(720, 850, 70) // => [0, 32, 18] race(80, 91, 37) // => [3, 21, 49]
這題的關鍵有2處:
首先得弄清楚關係,在B追趕A的過程中,A可是一直沒閒著,沒停下腳步的!
所以如果要讓B趕上A,得滿足這個等式:
v1 * time + g = v2 * time
這樣求time就很簡單了,不過最關鍵的地方,還是如何把時間拆分成時分秒。
我的做法是先求時鐘,根據餘數求分鐘,再根據餘數求秒鐘。
function race(v1, v2, g) { var h = -1; var mn = -1; var s = -1; var remainder; var speedGap = v2 - v1; if(speedGap > 0){ remainder = g % speedGap; h = parseInt(g / speedGap); mn = parseInt(60 * remainder / speedGap); remainder = remainder * 60 % speedGap; s = parseInt(remainder * 60 / speedGap); return [h, mn, s]; } return null; }
以上就是 JavaScript趣題:烏龜賽跑的內容,更多相關內容請關注PHP中文網(www.php.cn)!