【问题标题】:Return all possible sums of number array返回数字数组的所有可能总和
【发布时间】:2013-10-31 07:32:59
【问题描述】:

我已经检查了我的代码一百万次,但无法找出问题所在。我编写了一个代码,它将返回数组中所有可能的数字总和。当数组中有 3 个数字时它工作正常,但如果我向数组中添加另一个数字,它会用 NaN 替换一些应该是总和的数字。 例如:

array = [4, 6, 3, 7] 正在返回:

[ 20, 16, 10, 13, 9, 14, 11, 7, 17, NaN, 13 ] 和 NaN 应该是“10”

array = [4, 6, 3, 7];
newarray = [0];
for (i = 0; i < array.length; i++) {
    newarray[0] += array[i];
}
x = 0;
y = 1;
for (i = 0; i < array.length; i++) {
    newarray.push((newarray[0]-array[i])); 
    if (i !== 0) {
        y = y+array.length; 
    }
    x = i;
    while (x < array.length) {
        if (x != i) {
            newarray.push((newarray[y]-array[x]));
        }
        x++;
    }
}
console.log(newarray);`

我在一些应该是数字的插槽中得到 NaN 的事实使我相信 while 循环中的变量 x 存在问题,但我的大脑正在思考问题的实际出处。 http://jsfiddle.net/nsjY6/

【问题讨论】:

    标签: javascript arrays for-loop while-loop


    【解决方案1】:

    newarray[y] 这里导致 NaN

    newarray.push((newarray[y - 1]-array[x]));
    

    [ 20, 16, 14, 17, 13, 14, 10, 6, 17, 10, 13 ]

    添加我的版本

    var array = [4, 6, 3, 7];
    
    var newarray = [];
    
    for (i=0; i< Math.pow(2, array.length); i++) {
    
        var s = i.toString(2)
        var t = 0;
        for (c in s) t += s[c] * array[c];
    
        newarray.push(t);
    }
    
    console.log(newarray);
    

    【讨论】:

    • 这实际上将整个输出更改为不正确的输出,但这确实给了我一些东西看,从那里我可能能够准确地找出我需要设置什么模式来代替 y。
    • 如果你用 0 而不是 1 初始化 y 也是一样的。
    • 您的反应虽然不正确,但让我找出问题所在。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多