我正在尝试使用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;
答案 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
的结果。