Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用reducer函数将一个数组中的所有值添加到JS中的另一个数组中_Javascript_Algorithm - Fatal编程技术网

Javascript 尝试使用reducer函数将一个数组中的所有值添加到JS中的另一个数组中

Javascript 尝试使用reducer函数将一个数组中的所有值添加到JS中的另一个数组中,javascript,algorithm,Javascript,Algorithm,编辑:我发现了一个问题:我没有解释3和5的倍数何时匹配!有没有关于如何消除重复数字的提示 我试图解决自由代码阵营的第一个Euler问题:3和5的倍数 问题在于:在提供的参数值编号下找到所有3或5的倍数之和 当我查看我的代码时,它适用于10的情况,但不适用于其他任何情况。我已经看了,尝试了另一种选择,但找不到问题。这就是我所做的 我的思考过程和当前任务的执行情况 创建一个循环,列出参数编号之前的所有编号 制作了两个while循环,一个用于3的倍数,一个用于5的倍数 在每个while循环中,我希望不

编辑:我发现了一个问题:我没有解释3和5的倍数何时匹配!有没有关于如何消除重复数字的提示

我试图解决自由代码阵营的第一个Euler问题:3和5的倍数

问题在于:在提供的参数值编号下找到所有3或5的倍数之和

当我查看我的代码时,它适用于10的情况,但不适用于其他任何情况。我已经看了,尝试了另一种选择,但找不到问题。这就是我所做的

我的思考过程和当前任务的执行情况

  • 创建一个循环,列出参数编号之前的所有编号
  • 制作了两个while循环,一个用于3的倍数,一个用于5的倍数
  • 在每个while循环中,我希望不断地添加乘数(3或5),直到num小于3或5的总和 我必须加上+3和+5,这样总数组中的最后一个数字就不会超过num

  • 然后,我获取total数组并实现reduce函数以获得三个和五个总计的总和

  • 注意:我可以得到一个值数组。在10的例子中,我得到[3,6,9,5]

    我的代码
    函数倍数f3和5(num){
    总数=[];
    设3s=0;
    设五=0;
    常数减速机=(累加器,电流值)=>累加器+电流值;
    for(设i=1;i三加三){
    //共推(三次);
    3s+=3;
    总推力(三个)
    }
    而(数值>五加五){
    //共推(五次);
    五个+=5;
    总推力(五)
    }
    }
    总计=总计。减少(减速机);
    返回总数;
    }
    控制台日志(多个3和5(10))
    控制台日志(多个3和5(49))
    
    log(multiplesof3和5(1000))
    您当前的解决方案可以通过消除两个阵列(存储倍数的阵列)中的重复项来修复。然而,这仍然是一个非常迂回的方式来实现你想要的。从你的问题陈述中,我不明白为什么你需要存储倍数,然后按照你选择的方式求和

    由于无论如何都要循环处理1和参数之间的所有整数,因此只要遇到它们,就可以将它们添加到总和中:

    let sum = 0
    for (let i = 1; i < num; i++) {
        if (i % 3 == 0 || i % 5 == 0) {
            sum += i
        }
    }
    
    let sum=0
    for(设i=1;i

    也就是说,除非您有一个特殊的原因选择以这种方式解决问题,您没有说明。

    您当前的解决方案可以通过消除两个阵列(存储倍数的阵列)中的重复项来修复。然而,这仍然是一个非常迂回的方式来实现你想要的。从你的问题陈述中,我不明白为什么你需要存储倍数,然后按照你选择的方式求和

    由于无论如何都要循环处理1和参数之间的所有整数,因此只要遇到它们,就可以将它们添加到总和中:

    let sum = 0
    for (let i = 1; i < num; i++) {
        if (i % 3 == 0 || i % 5 == 0) {
            sum += i
        }
    }
    
    let sum=0
    for(设i=1;i

    也就是说,除非你有一个特殊的原因,为什么你选择用这种方式来解决它,你没有说明。

    我的建议是减少运算次数,没有模数op:

    函数倍数f3和5(num){
    设total=0;
    
    对于(设i=3,j=5;i我的建议,减少了运算次数,没有模数op):

    函数倍数f3和5(num){
    设total=0;
    
    对于(假设i=3,j=5;如果49,你应该有:3+6+9+12+15+18+21+24+27+30+33+36+39+42+45+48+5+10+15+20+25+30+35+40+45,结果正好是633。我理解正确吗?是的。在进一步挖掘之后,我认为问题是他们之间的重复。你绝对正确。关于如何解决这个问题,你有什么建议/提示吗o那?你对3和5的倍数在
    total
    中被再次添加有问题吗?对于49,你应该有:3+6+9+12+15+18+21+24+27+30+33+36+39+42+45+48+5+10+15+20+25+30+35+40+45,结果正好是633。我理解正确吗?是的。再深入一点后,我认为问题在于du在它们之间复制你是完全正确的。你对如何做有任何建议/提示吗?你对再次添加
    total
    中的3和5的倍数有问题吗?除了我试图想出一个解决方案之外,我没有理由这样设计它。我喜欢这添加的简单性。没有理由y我是这样设计的,而不仅仅是我试图想出一个解决方案。我喜欢这增加的简单性。