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; }
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com