2017-08-02 8 views
-1

私はちょうどハッカーのランクの質問を解決しました。質問は次のとおりです。 https://www.hackerrank.com/challenges/kangaroo/problemこれらの2つのコードの違い

以下のソリューションは、すべての30回のテスト

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; 
} 

しかし、それは2つのテストに合格していない以下のように、私は次のようにコードを変更した後に合格しました。

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

returnValのデフォルト値は "NO"です。ですから、最初のif文は必要ではないはずです。だから、なぜ2番目のコードが2つのテストに合格していないのですか?

+0

は*他*もし... ... –

+0

ヒント: '(×1 - ×2)%(V2 - V1)=== 0 'であっても、真の可能性x2 Joe

答えて

2

は、第二ははいを返さないながらだから、最初のコードはないを返します

kangoroo(1,1,2,2) 

を想像してみてください。あなたは第二に最初の条件を実装することがあります。

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

私の脳は燃えています。あなたの説明をありがとう。 – Grcn

+0

@ grcn youre welcome;) –

0

最初のコードブロックの2番目の条件は、、それ以外の場合はです。最初のif条件が満たされない場合にのみ実行されます。

if条件とelse if条件の両方に一致する入力を持つことができます。その結果、最初のケースでは出力がNO(ifと一致し、else ifは実行されません)となりますが、変更されたコードではYES(前者はelse ifと一致します)。

関連する問題