编辑:我发现了问题:我没有考虑到 3 和 5 的倍数匹配时!关于如何消除重复数字的任何提示?
我正在尝试解决来自免费代码营的欧拉问题的第一个问题:3 和 5 的倍数https://learn.freecodecamp.org/coding-interview-prep/project-euler/problem-1-multiples-of -3-5
问题是这样的:在提供的参数值编号下找到所有 3 或 5 的倍数的总和。
当我查看我的代码时,它适用于 10 的情况,但不适用于其他任何情况。我看过了,尝试了另一种选择,但找不到问题。这是我所做的。
我的思考过程和当前任务的执行
在每个 while 循环中,我想不断添加乘数(3 或 5),直到 num 小于 3 或 5 的总和,我必须添加 +3 和 +5,这样总数组中的最后一个数字就不会超过 num
然后我取了总数组并实现了reduce函数来得到三五总和的总和
注意:我能够获得一组值。在 10 的情况下,我得到 [3, 6, 9, 5]
我的代码
function multiplesOf3and5(num) {
let total = [];
let threes = 0;
let fives = 0;
const reducer = (accumulator, currentValue) => accumulator + currentValue;
for (let i = 1; i < num; i++) {
while (num > threes+3) {
//total.push(threes);
threes += 3;
total.push(threes)
}
while (num > fives+5) {
//total.push(fives);
fives += 5;
total.push(fives)
}
}
total = total.reduce(reducer);
return total;
}
console.log(multiplesOf3and5(10))
console.log(multiplesOf3and5(49))
console.log(multiplesOf3and5(1000))
我试图解决的问题:
- 尝试在每个 while 循环中单独求和以获得 3 到 num 的所有倍数的总和,第二个 while 循环相同
- 我通过添加两个数组来做到这一点,total1 和 total 分别代表三和五的总和。
测试用例:
multiplesOf3and5(1000) 应该返回 233168。(我得到 266333)
multiplesOf3and5(49) 应该返回 543。(我得到 633)
multiplesOf3and5(10) 应该返回 23。(我得到 23)
您当前的解决方案可以通过消除两个数组(存储倍数的数组)中的重复项来修复。但是,它仍然是实现您想要的非常迂回的方式。从您的问题陈述中,我不明白为什么您需要存储倍数,然后按照您选择的方式获取总和。
由于您无论如何都要遍历 1 和您的参数之间的所有整数,因此您可以在遇到它们时立即将它们添加到总和中:
let sum = 0
for (let i = 1; i < num; i++) {
if (i % 3 == 0 || i % 5 == 0) {
sum += i
}
}
也就是说,除非您有特定的原因选择以这种方式解决问题,但您没有说明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句