我是一名初级程序员,最近发现了 Euler 项目的问题。我有点迷上了第一个问题,因为它对我来说是合适的难度。
我想做的是在 1000 以下的数字范围内计算 3 和 5 的倍数之和。
所以,我已经想出了如何创建两个单独的数组,每个数组都是 3 和 5 的倍数。
for (var i = 0; i < 1000; i++) {
eulerList.push(i);
if (i%3 == 0 && i != 0) {
multiThree.push(i);
}
if (i%5 == 0 && i != 0) {
multiFive.push(i);
}
if (i == 999) {
var eulerSum = multiThree.concat(multiFive);
print("The total sum is " + eulerSum.reduce(getSum));
}
现在,当我尝试计算倍数之和时,它给了我错误的结果,经过一段时间的思考我意识到这是因为列表中的一些数字加倍了。
假设我在 arrayA 和 arrayB 中有一个整数值 15,但我只希望它保留在 arrayA 中,因此我最终可以计算所有倍数的总和。我将如何处理?我一直坚持这一点,在这里阅读并谷歌搜索了几个小时,但我无法全神贯注。 帮助将不胜感激。提前致谢!
最佳答案
你不需要创建单独的数组来存储它们并像那样做。只需创建一个变量 sum
并将数字添加到它们。以下代码段给出了欧拉项目的正确结果。
let sum = 0;
for(let i = 0;i<1000;i++){
if(i % 3 === 0 || i % 5 === 0) sum += i
}
console.log(sum)
您可以使用 Arithmetic series 来做到这一点公式
console.log(333/2*(3 + 999) + 199/2*(5 + 995) - 66/2*(15+990));
如果你还想用两个不同的数组来求解。然后创建一个 Set()
,它将仅保留两个数组中的唯一值。无需检查 0
它不会影响总和
let multiThree = [];
let multiFive = [];
for (var i = 0; i < 1000; i++) {
if (i%3 == 0) {
multiThree.push(i);
}
if (i%5 == 0) {
multiFive.push(i);
}
if (i == 999) {
var eulerSum = [...new Set(multiThree.concat(multiFive))];
console.log(eulerSum.reduce((ac,a) => ac+a,0))
}
}
关于javascript - 有没有办法从两个不同的数组中删除相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55508498/