项目euler#1,黑客等级

时间:2015-10-17 02:34:08

标签: javascript

我正在尝试使用HackerRank中的Javascript进行项目euler#1。有人可以给我一些关于我的代码错误的提示。结果总是为零。

我在谷歌Chrome控制台中运行我的功能,然后输入processData(10),它给了我23.我输入processData(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);
});
&#13;
&#13;
&#13;

1 个答案:

答案 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的结果。