A と B という名前の 2 匹のカメが競争しています。
A は時速 720 フィートの速度で前進しています。
若いBは、Aがそれよりも遅く走らなければならないことを知っているので、それでも落ち着いて野菜を食べています。
B が走り始めると、A はすでに 70 フィート先にいることがわかりますが、B の速度は時速 850 フィートなので、間違いなく追いつくことができます。
すみません、B が A に追いつくまでどれくらいかかりますか?
より一般的な状況: 2 つの速度 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 * 時間 + g = v2 * 時間
この方法で時間を見つけるのは非常に簡単ですが、最も重要なことは方法です。時間を時、分、秒に分割します。
私のアプローチは、最初に時計を見つけ、その余りに基づいて分を見つけ、次に余りに基づいて秒を見つけることです。
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 Fun Question: Turtle Race の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。