2015-10-17 59 views
0

我正在嘗試在HackerRank中使用Javascript處理項目euler#1。有人能給我提示我的代碼有什麼問題。結果總是爲零。項目euler#1,黑客等級

我跑我的功能在我的谷歌瀏覽器的控制檯,然後輸入我過程數據(10),它給了我23.我輸入過程數據(100),它給了我2318

當我嘗試使用我的代碼在從黑客等級的控制檯中,它輸出的結果爲零,就像它沒有通過第一個測試,它是0.

有沒有人試圖解決JavaScript中的hackerrank中的一些問題?

function processData(input) { 
 
    var result = [] 
 
    var total=0 
 
    function findMultipleThreeAndFive(n){ 
 
     var i = 0; 
 
     for(i ; i < n ;i++){  
 
      if(i%3 == 0 || i%5 == 0){ 
 
       result.push(i); 
 
      } 
 
     } 
 
    } 
 
    findMultipleThreeAndFive(input) 
 

 
    function sum(){ 
 

 
     for(var j = 0; j< result.length ;j++){ 
 
      total += result[j] 
 
     } 
 
     return total; 
 
    } 
 
    sum() 
 

 
    console.log(total) 
 
} 
 

 
process.stdin.resume(); 
 
process.stdin.setEncoding("ascii"); 
 
_input = ""; 
 
process.stdin.on("data", function (input) { 
 
    _input += input; 
 
}); 
 

 
process.stdin.on("end", function() { 
 
    processData(_input); 
 
});

+0

請解釋您在嘗試解決您的代碼時遇到的問題。它也有助於爲您的功能提供輸入。 –

回答

1

首先關閉所有,你的代碼工作:http://jsfiddle.net/azggks5a/,但我想我會告訴你我會怎麼解決這個問題:

我建議你使用ES6套,因爲他們處理你的價值觀的獨特性。

我開始迭代我想要的倍數。然後我將迭代倍數乘以每個數字直到belowThis。如果結果低於belowThis我將結果添加到集合中,否則我沒有。

Here的代碼:

var multiplesOf = [3,5]; 
var belowThis = 10; 
var multiples = new Set(); 
var totalOfMultiples = 0; 

multiplesOf.forEach(function(element, index){ 
    for(var i=0;i<belowThis;i++) { 
     if(multiplesOf[index]*i<belowThis) { 
      multiples.add(multiplesOf[index]*i); 
     } 
    } 
}); 

multiples.forEach(function(element, index){ 
    totalOfMultiples+=element; 
}); 
console.log(totalOfMultiples); 

您可以更改您要檢查,並解決您將增加belowThis 1000的問題,並得到233168結果的倍數。

+0

如果你想讓這段代碼更高效,你可以創建一個'else {break; '用if語句。我沒有,只是爲了保持簡短。 –