2017-08-02 4 views
-1

Ich habe gerade eine Hacker Rang Frage gelöst. Die Frage ist: https://www.hackerrank.com/challenges/kangaroo/problemWas ist der Unterschied zwischen diesen beiden Codes

Die folgende Lösung, die alle 30 Tests

function kangaroo(x1, v1, x2, v2) { 
    var returnVal = "NO"; 
    if (x2 > x1 && v2 > v1) { 
     returnVal = "NO"; 
    } else if ((x1 - x2) % (v2 - v1) === 0) { 
     returnVal = "YES"; 
    } 
    return returnVal; 
} 

bestanden hat aber nachdem ich den Code wie geändert haben als darunter 2 Tests nicht bestanden hat.

function kangaroo(x1, v1, x2, v2) { 
    var returnVal = "NO"; 
    if ((x1 - x2) % (v2 - v1) === 0) { 
     returnVal = "YES"; 
    } 
    return returnVal; 
} 

Der Standardwert von returnVal ist "NO". Also, ich denke, dass die erste wenn Aussage nicht notwendig sein sollte. Warum hat der zweite Code nicht zwei Tests bestanden?

+0

* anderes *, wenn ... ... –

+0

Hinweis: '(x1 - x2)% (v2 - v1) === 0 'wahr sein könnte sogar wenn x2 Joe

Antwort

2

Stellen

kangoroo(1,1,2,2) 

So ist der erste Code Nein zurückkehren würde, während der zweite Ja zurückgibt. Sie können die erste Bedingung in die zweite implementieren:

function kangaroo(x1, v1, x2, v2){ 
    if ((x1 - x2) % (v2 - v1) === 0 && !(x2 > x1 && v2 > v1)) { 
    return "YES"; 
    } 
return " No"; 
} 
+0

Ok Mate mein Gehirn ist verbrannt. Danke für Ihre Erklärung. – Grcn

+0

@grcn youre willkommen;) –

0

Die zweite Bedingung im ersten Codeblock ist ein else if. Es wird nur ausgeführt, wenn die erste if-Bedingung nicht besteht.

Sie können eine Eingabe haben, die sowohl der if-Bedingung als auch der else if-Bedingung entspricht. Das würde dazu führen, dass die Ausgabe im ersten Fall NEIN ist (die if passt und die else if wird nie ausgeführt), aber JA in Ihrem modifizierten Code (der ehemalige else if entspricht).

Verwandte Themen