2015-10-17 23 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语句。我没有,只是为了保持简短。 –