如何通过特定总和拆分数字

时间:2016-10-25 15:55:01

标签: javascript arrays

此变量x包含需要针对数组进行测试的数字。 var x = 10; var ary = [ 3,5 ]

我想测试x是否可以通过ary中任意组合键的总和来计算,然后显示哪些键加起来x

在这种情况下,3无法使用。因此结果将是5, 5 if x = 10(因为函数应该搜索数组并发现5 + 5等于10)

数组和x的长度未知。我没有使用任何库。这就是我到目前为止的目标:



var x = 10;
var ary = [ 3, 5 ];

function cycle(){
  var result;
  for( var i = 0; i < ary.length; i++ ){
    if( ary[ i ] + ary[ i ] == x ){
       result = ary[ i ] + ',' + ary[ i ];
    }
    else if( ary[ i ] + ary[ i + 1 ] == x ){
      result = ary[ i ] + ',' + ary[ i + 1 ];
    }
    else if( ary[ i + 1 ] + ary[ i + 1 ] == x ){
      result = ary[ i + 1 ] + ',' + ary[ i + 1 ];
  }
  return result;
  }
}
  

var result = cycle();
document.write( result );
&#13;
&#13;
&#13;

我知道上面的代码很糟糕,至少不灵活,只适用于我使用它的特定情况。我如何包含所有可能的组合?

假设数组仍然只有2个值35,下面是更多基于x的结果:

如果x = 8,结果将= 3, 5;

如果x = 15,结果将= 5, 5, 5

如果x = 9,结果将= 3, 3, 3等。

注意:对密钥的使用次数没有限制。

1 个答案:

答案 0 :(得分:2)

您可以使用乘法。创建一个数组.length等于输入数组ary1中的最大数,将数组的索引乘以当前数,如果产品等于目标数,则创建一个数组让.length等于index并使用当前元素ary填充数组,否则将返回数组的结果索引设置为输入数字。

&#13;
&#13;
const x = [8, 9, 10, 15];
let ary = [3, 5];

let nums = (n, arr) => {
  let [keys, res] = [
    Array.from(Array(Math.max.apply(Math, arr) + 1).keys()).splice(1)
    , Array()
  ];
  for (let prop of arr) {
    for (let index of keys) {
      if (prop * index <= n) {
        if (prop * index === n) {
          res.push(Array(index).fill(prop)); break;
        }
      } else {
        res.push(prop); break;
      }
    }
  }
  return {x:n, result:res};
}

for (let num of x) console.log(nums(num, ary));
&#13;
&#13;
&#13;