2012-03-24 9 views
0

Ich habe eine Hausaufgabe, wo ein Teil der Anforderung ist, rekursiv alle Permutationen der ganzen Zahlen 0 - 9 zu berechnen. Der Professor gab uns tatsächlich den Algorithmus für diesen Teil der Frage . Ich habe den Rest der Aufgabe erledigt, aber ich kann die Permute-Funktion nicht funktionieren lassen ... Ich implementiere sie genau so, wie sie in den Zuweisungsinformationen angezeigt wurde. Jedoch, wenn ich es ausführe, wird jede Permutation mehrere Male wiederholt (und ich bin nicht sicher, ob ich sogar alle korrekten Permutationen bekomme.)C++: rekursiv Computer alle Permutationen der Ziffern 0 - 9

Ich denke, dass er einen Fehler auf den Anweisunganweisungen gemacht haben muss. Ich arbeite seit ein paar Stunden daran und finde nicht heraus, wo ich falsch liege. Kann mir jemand helfen, mich in die richtige Richtung zu lenken?

Hier ist der aktuelle Code:

void permute(int v[], int curr) { 
    for (int i = curr; i < MAX; i++) { 
     swap(v[i], v[curr]); 
     permute(v, curr + 1); 
     swap(v[curr], v[i]); 
    } 
} 

EDIT: Eigentlich direkt nach dieser Veröffentlichung ich realisierte, dass es mit dem Swap zu tun hat, nicht wahr? Weil ich gerade und gleich bin, also tausche ich identische Nummern. Hm, sollte es tauschen (v [i], v [curr + 1])?

+1

Was ist das Problem speziell? Sie könnten auch hinzufügen, wenn (curr == MAX) // print array – amit

+0

amit: Ich denke, das kann tatsächlich geholfen haben. Ich habe eine Print-Anweisung hinzugefügt, um sie zu überprüfen, habe aber gerade gemerkt, dass sie vor dem Erreichen von MAX war. Ich glaube, da wurde ich verwirrt. Lass es mich ausprobieren mit if (cur == max) und schau was ich bekomme. – Nate

+0

Ihr Code sieht soweit gut aus. Es sollte in der aktuellen Form funktionieren. Vielleicht druckst du zu oft? Sie sollten nur drucken, wenn 'curr == MAX'. – Howard

Antwort

1

schlang meine Kommentare als Antwort [die die OPs Problem zu lösen scheint]:

(1) Sie können Ihr Array drucken möchten, wenn Sie max erreichen:

if (curr == MAX) //print array 

(2) Sie Vielleicht möchten Sie die Anzahl der Permutationen zählen, die Sie erhalten, können Sie dies tun, indem Sie eine static int [oder eine globale Variable oder einen zusätzlichen Parameter int& count] - und erhöhen Sie es immer wenn curr == MAX [zusammen mit dem Drucken].

Verwandte Themen