3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
929
929
EMPFEHLEN
-
Hallo,
ich habe gestern ein Programm geschrieben welches Permutation ausgibt. Und zwar gibt man ein 4- stelliges Wort ein und erhält alle Permutation.
Habe das ganze mit 4 for Schleifen gelöst. Jetzt habe ich aber dass Problem dass er mir bei z.B. dem Wort "halo" auch kombinationen wie hhhh ausgibt.
Ich weiß dass ich noch eine if Funktion anhängen muss weiß aber nicht wie ich das überprüfen kann.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#include <stdio.h> #include <string.h> #include <math.h> int main (void) { int i, j, o, u; char z[4]; printf("Permutationen zu einem Wort\n" "===========================\n" "Gib ein Wort mit 4 Zeichen ein: "); z[0] = getchar(); z[1] = getchar(); z[2] = getchar(); z[3] = getchar(); getchar (); for (i = 0; i <= 3; i++){ for (j = 0; j <= 3; j++) for (o = 0; o <= 3; o++) for (u = 0; u <= 3; u++) if (?) printf("%c%c%c%c ", z[i], z[j], z[o], z[u]); } return 0; }
Dachte mir er soll schauen dass alle Werte von z[0] - z[1] gleich der werte z[i] - z[u] sind. Weiß aber nicht wie ich das abfragen kann.
Wäre net wenn mir jemand helfen könnte.
Gruß Benny
-
Hi,
wenn ich dich richtig verstanden habe, möchstest du das jeder Buchstabe auch nur einmal vokommt. Wenn dem so ist, musst du ab der zweiten for-Schleife übrprüfen, ob der Buchstabe schon benutzt wird.
z.B.
Code cpp:1
if(z[i] == z[j]) continue;
Dadurch überspringt das Programm den Schleifendurchlauf. Dies müsstest du entsprechend für die anderen fors auch realisieren.
GrüßeWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
Ja will ich im Prinzip schon aber wenn ich z.B. "woro" eingebe dann würde er mich ja rausschmeisen weil zwei Buchstaben gleich sind und des will ich nicht

Gruß
-
Achjo...das hab ich ganz unterschlagen.
Was mir sonst spontan einfällt wäre zusätzlich ein counter, der auch die Anzahl zählt und diese in der if vergleicht.
Mir fällt jedoch nicht auf die schnelle ein, ob es eine schnellere bzw effektivere Lösung gibt, da müsste ich mir dann morgen drüber mehr Gedanken machen.
GrüßeWas soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.
-
Ich habe mal in einem Beitrag ein Beispielprogramm in Java zum Zulosen ohne Zurücklegen veröffentlicht; die dortige Methodik kannst du leicht anpassen, um sie in deinem C-Programm zu verwenden.
Außerdem habe ich in einem anderen Beitrag eine Java-Klasse veröffentlicht, die den SEPA-Algorithmus verwendet, um bei Bedarf Permutationen iterativ liefern zu können; du darfst sie gerne als Vorlage für Klassen in C++ verwenden.
Eine englische Erklärung des SEPA-Algorithmus inklusive einer C-Implementierung findest du hier.Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
13.05.10 16:08 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.In C++ ist der Algorithmus bereits in der STL implementiert: http://www.cplusplus.com/reference/a...t_permutation/
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Vielen Dank hat wunderbar funktioniert
Ähnliche Themen
-
Permutation eines Arrays
Von 'GreenDragon' im Forum PHPAntworten: 1Letzter Beitrag: 04.10.10, 09:27 -
Permutation erzeugen
Von Thomas Darimont im Forum Algorithmen & Datenstrukturen mit JavaAntworten: 0Letzter Beitrag: 26.06.10, 11:59 -
C - Permutation mit 10 Zahlen
Von sheester im Forum C/C++Antworten: 10Letzter Beitrag: 27.12.09, 14:52 -
Permutation (kombinationen anzeigen)
Von hemorieder im Forum C/C++Antworten: 1Letzter Beitrag: 05.04.06, 11:57





Zitieren

Login






