Alle möglichen kombinationen eines strings?
-
@windoof
funktioniert super! danke
-
und wie muss ich die funktion abwandeln, wenn ich die werte alle "nacheinander" ein eine listbox einfügen will?
d.h.:
immer wenn eine neue kombination errechnet ist -> sofort in listbox, und nicht erst warten bis alle kombinationen errechnet sind und dann in die listbox
-
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString Variante=""; Memo1->Clear(); Rekursion(Edit1->Text,Edit1->Text.Length(),Variante); } //--------------------------------------------------------------------------- //Rekursive procedure !!! //Parameter VARIANTE muss Call by Referenz übergeben werden !!! void __fastcall TForm1::Rekursion(AnsiString Satz, int Rek, AnsiString &Variante) { if (Rek>0) { Rek--; for (int i=1;i<=Satz.Length();i++) { if (Rek>0) Rekursion(Satz,Rek,Variante+Satz[i]); else Memo1->Lines->Add(Variante+Satz[i]); }}} //---------------------------------------------------------------------------
Braucht ca 47 sec für "123456" !!!
auf 1700er Pentium
-
Sehr schön. So ganz durchgestiegen bin ich noch nicht, aber trotdem: sehr schön!
DerAltenburger schrieb:
Braucht ca 47 sec für "123456" !!!
Und ohne Ausgabe vermutlich keine Sekunde?
btw: Das call by reference ist hier nicht nötig.
-
DerAltenburger schrieb:
<Edit: Zitate auf das Notwendigste beschränken. Danke!>
funktioniert wirklich super!
jetzt hab ich noch ein problem:
was mache ich wenn ich alle kombinationen barauche die zwischen 3 und 6 zeichen lang sind?
-
Dann gibst Du noch nen Parameter (int Min) mit.
Die Ausgabe (in Memo) erfolgt erst bei Rek>= Min
Anstelle der Laenge des Stringes ubergibst Du die gewünschte maximalzahl (sollte NICHT groesser sein als Laenge!!!)
-
nein falsch verstanden ich meine ich habe den String "abcdefghijklmnopqurstuwxyz"
und min:3; max:4;ausgabe:
aaa
aab
aac
...
aba
...
zza
zzb
...
zzz
aaaa
aaab
aaac
...
aaba
...
zzza
zzzb
...
zzzz
-
Kannst du C++? Kannst die Funktion doch selbst so umbauen, dass erh alt nur 3 Zeichen ausgibt...
-
Konsti schrieb:
nein falsch verstanden ...
Joooo, Du meine Antwort!
Wenn Du als Parameter Rek Deine maximalzahl anstelle der Stringlaenge uebergibst, rkursiert das ganze nur so oft!!! (Count- Down- Zaehler)
Die Ausgabe machst Du nicht nur am Ende der Rekursion (else- Zweig), sondern schon wenn Variante Deine mindestlaenge hat!
Voila
@Windoof
Hast Du auch konstruktive Tips? Er will nicht NUR 3 Zeichen lange Ausgaben!!!
-
jo du hast recht! (hab ich auch nicht bezweifelt ) thx!