2017-03-08 6 views
0

ここにthe challengeへのリンクです。数値が2つのフィボナッチ数の乗算と等しいかどうかを調べる

ランダムに渡された数字が2つの連続したフィボナッチの乗算と等しいかどうかをテストすることです。

function productFib(prod) { 
    var x = [] 
    var z; 

    var a = 0 
    var b = 1 
    var c = 7 
    var h = 1000 
    while (c < 100) { 
     var t = a + b 
     var a = b 
     var b = t 
     x.push(t) 
     c++ 
    } 
    for (var i = 0; i < h; i++) { 
     if (prod = x[i] * x[i + 1]) { 
      z = [x[i], x[i + 1], true] 
     } else { 
      z = [x[i], x[i + 1], false] 
     } 
    } 
    return z 
} 

まず、フィボナッチ数を生成する関数を作成してから、配列に渡しています。これはテストされているので、問題はないと思います。次に、forループを作成して、2つの数値を掛け合わせて、それらが乱数と等しいかどうかをチェックします。

少なくともそれは私の考えですが、[1, 2, true]または[undefined]のような結果が毎回続きます。

+1

'のprod = xに詳述されている[I] * X [I + 1]'おそらく '='の代わりに '=='を使うべきです。 –

+0

はい、私は完全に忘れました - ありがとう。私はまだ上書きする方法(zの値を設定する)を理解することができません - それは未定義を返す理由だと推測します –

+2

その2番目のループのすべての反復で 'z'を上書きしています。一度に 'true'で値を取得した可能性は十分ありますが、' false'で返されることはあります。 – Bergi

答えて

-1

このコードは動作します

function productFib(prod){ 
    var x = [] 
    var z; 

    var a = 0 
    var b = 1 
    var c = 0 
    var h = 1000 
    var t=0 

    //Edited the loop to only check numbers below the one you are looking 
    // to make(prod) because any two consecutive numbers over that will not produce the 
    // number you are looking for(14*any number above that cannot make 13) 
    while(t < prod){ 
     //removed c++ 
     t = a + b 
     var a = b 
     var b = t 
     x.push(t) 
    } 
    //Set the loop to loop through the whole array(x.length) 
    for(var i = 0; i < x.length; i++){ 
     if(prod == x[i]*x[i+1]){ //Added a double equals sign 
      z =[x[i], x[i+1], true] 
      //For testing 
      console.log(x[i] + ' and '+x[i+1] + ' make ' + prod) 

      //Return the number when one is found, not after looking through 
      //the whole array 
      return z 
     } 
    } 
    //In case none are found 
    return false 
} 
productFib(4895) //this is the multiplication of 89 and 55, successive fib's 

デモはここにある:https://jsfiddle.net/qrq3zh7j/3/

変更コメント

+1

なぜ 't = true'をしてから' t = a + b'をやるのですか?あなたは何をするつもりなのですか?どこにも使われていないのに、なぜ 'C++ 'をやっているのですか? –

+0

ああ、愚かな私のiveそれを変更しました – T0m

+1

私は彼が何が起こっていたか見ることができるようにできる限り私はOPのコードを維持しようとしていた。 – T0m

関連する問題