如何计算所有可能的多项选择组合?

时间:2016-08-07 20:09:04

标签: javascript

考虑以下多项选择题:

  

苹果的颜色是什么?

     
      
  • 一个。红色
  •   
  • 湾绿色
  •   
  • ℃。蓝色
  •   
  • d。黑
  •   

现在,我想计算所有可能的答案,我可以手动完成,就像这样......:

a
b
c
d
a, b
a, c
a, d
b, c
b, d
c, d
a, b, c
a, b, d
a, c, d
b, c, d
a, b, c, d

......但这很容易出现人为错误。我怎么能用JavaScript编程?

我最初的想法是定义选择的总数(a,b,c,d = 4)......:

const TOTAL_CHOICES = 4;

// TO-DO

......但后来我不知道下一步应该是什么。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在@ nenad-vracar评论的帮助下,我找到了一个解决方案:

function combinations(str) {
  var fn = function(active, rest, a) {
    if (!active && !rest)
      return;
    if (!rest) {
      a.push(active);
    } else {
      fn(active + rest[0], rest.slice(1), a);
      fn(active, rest.slice(1), a);
    }
    return a;
  }
  return fn("", str, []);
}

var result = combinations('abcd').sort();

for (combination of result) {
    document.body.innerHTML += combination + '<br>';
}

这将输出:

a
ab
abc
abcd
abd
ac
acd
ad
b
bc
bcd
bd
c
cd
d

答案 1 :(得分:0)

这实现了我在评论中建议的方式。

var choices = ['d','c','b','a'];
var numCombos=Math.pow(2,choices.length);
var binNum;
writeln('Combos are:');
for (i=0;i<numCombos;i++)
{
 binNum=(i.toString(2));
 while (binNum.length<choices.length)
  binNum='0'+binNum;
 for (j=choices.length-1;j>=0;j--){
   if (binNum[j]=='1') write(choices[j]);}
 writeln();
}