>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 거북이 경주

JavaScript 재미있는 질문: 거북이 경주

黄舟
黄舟원래의
2017-02-04 15:37:241043검색

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]

이 질문에는 두 가지 핵심 사항이 있습니다.

먼저 B가 A를 쫓는 동안 A는 관계를 명확히 해야 합니다. 한 번도 유휴 상태가 아니었고 멈추지 않았습니다!

그래서 B가 A를 따라잡기를 원한다면 다음 방정식을 만족해야 합니다.

v1 * time + g = v2 * 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 Fun Question: Turtle Race 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.