Problem an einer Logik-Aufgabe (zeichenverdrehung)
-
Hi!
Gegeben ist eine beliebig-lange Zeichenfolge. Beispiel 345RTE5A
Man kann in dieser Zeichenfolge beliebig viele Zeichen untereinander vertauschen...
Und ich möchte eine Möglichkeit haben alle diese Möglichkeiten auszugeben..
So dass aus ABC z.B. folgendes wird:
ABC
ACB
BAC
BCA
CAB
CBAwie kann man dies anstellen? Nehme auch gerne C++ Codes an
MfG
Benjamin
-
Einmal jedes Element mit jedem, müsste in 2 Schleifen gehen, eine die das
aktuell zu vertauschende Element angibt (von links nach rechts) und eine innere
Schleife welche es mit allen anderen vertauscht.char zeichen[] = "ABC"; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; i++) { if (zeichen[j] != zeichen[i]) { int temp = zeichen[i]; zeichen[i] = zeichen[j]; zeichen[j] = temp; printf ("%s\n",zeichen); } } }
Alles was du noch machen musst ist eben ne Kopie für das vertauschen zu verwenden
oder nur in der Ausgabe durch richtiges angeben vertauschen.
So würde es nicht funktionieren weil die Zeichenkette ja verändert wird,
aber so ungefähr müsste das aussehen.
-
Dazu würde ich next_permutation benutzen...
-
Ganz so meinte ich das nicht ^^"
Hab mich nicht ganz gut ausgedrückt.Dein Code macht jetzt immer nur EINEN Austausch und gibt das Ergebnis an.
Das Problem ist dass man im Endeffekt X mal austauschen kann bevor es ausgegeben wird.
so dass aus ABCD auch BADC werden könnte..
-
_ProfEich schrieb:
Dein Code macht jetzt immer nur EINEN Austausch und gibt das Ergebnis an.
Hmm, wen meinst du jetzt
Ich meinte das ungefähr so:
Zu einer n-elementigen Menge gibt es n! verschiedene Möglichkeiten, diese zu kombinieren => n! berechnen, Schleife von 0 bis n!-1 durchlaufen und fertig...
-
Warum n! berechnen? next_permutation gibt doch zurück, ob es noch mehr gibt:
char v[] = "345RTE5A"; cout << v << ' '; while(next_permutation(v,v+8)) cout << v << ' ';
-
danke nomma hat geklappt mit dem next_permutation.
das vorherige war auf SirLant bezogen.