2016-08-07 12 views
0

Betrachten Sie die folgende Multiple-Choice-Frage:Wie berechnet man alle möglichen Multiple-Choice-Kombinationen?

Was ist die Farbe der Äpfel?

  • a. rot
  • b. grün
  • c. blau
  • d. schwarz

Jetzt möchte ich alle, es ist möglich, Antworten berechnen, und ich konnte es manuell tun, wie so ...:

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 

... aber das ist anfällig für menschliche Fehler. Wie kann ich das programmatisch mit JavaScript machen?

Mein erster Gedanke ist die Gesamtzahl der Entscheidungen (a, b, c, d = 4) zu definieren ...:

const TOTAL_CHOICES = 4; 

// TO-DO 

... aber dann weiß ich nicht, was die nächste Schritt sollte sein. Irgendwelche Ideen?

+0

Eine Suche nach "Permutationen und Kombinationen" gibt Ihnen alle Hintergrundinformationen, die Sie benötigen, um die möglichen Kombinationen von Antworten zu berechnen. Einige Taschenrechner haben eine nCr/nPr-Taste - um solche Probleme zu lösen. – enhzflep

+2

Werfen Sie einen Blick auf http://codereview.stackexchange.com/questions/7001/generating-all-combinations-of-an-array Sie können erhalten https://jsfiddle.net/Lg0wyt9u/1101/ –

+0

Math.Pow (2, NUMCHOICES) gibt Ihnen die Anzahl der Wahlmöglichkeiten, vorausgesetzt, "keine der oben genannten" ist eine Möglichkeit. Wenn es mindestens eine Auswahlmöglichkeit geben muss, ziehen Sie 1 davon ab. –

Antwort

0

Mit Hilfe von @ nenad-Vracar Kommentar fand ich eine Lösung:

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>'; 
} 

erhalten Sie folgende Ausgabe:

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

Dies implementiert die Art, wie ich in meinem Kommentar vorgeschlagen.

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(); 
} 
+0

Dies lief in dem Online-Runner, den ich verwendete, aber Sie könnten "Dokument" hinzufügen. vor dem Schreiben und Schreiben, um es tragbarer zu machen. –

Verwandte Themen