ich habe z.B. 2 Zeichen (Anzahl nach oben offen). 1 Zeichen kann 13 Werte annehmen. Nun soll der Algorithmus alle 169 Möglichkeiten (Kombinationen) ausgeben. Also immer entsprechend der Anzahl.
Lösen möchte ich das in C#. Die Ausgabe soll in Blöcken je 13 Zeilen gemacht werden. Bevor eine Zeile ausgegeben wird, soll sie in einen string zwischengespeichert werden.
Hat jemand eine Lösung, ein Gerüst, oder irgendeinen Ansatz für mich für dieses Problem?
bei weniger als 27 verschiedenen Werten je Zeichen kann man zur Ausgabe schlicht Buchstaben verwenden (bei weniger als 53 könnte man Groß- und Kleinbuchstaben unterscheiden, u.U. kann man auch noch die lateinischen Ziffern etc hinzunehmen).
Einen Wert W zwischen 1 und 13 kannst du dann einfach in das ASCII-Zeichen 64 + W übersetzen. Die Kombination der Werte 5 und 12 wäre dann zB. „EL“.
Zur Ausgabe aller Kombinationen von Zeichen aus der Menge 1…N (N ist in Deinem Bsp 13) der beliebigen Länge L (bei Dir: 2 oder mehr) würde ich eine Rekursion vorschlagen. Der Rekursionsfunktion wird die bis dahin erstellte Zeichenkette übergeben. Die Funktion durchläuft dann eine Schleife von 1…N, in der das nächste Zeichen angehängt wird. Für jedes angehängte Zeichen ruft sich die Funktion rekursiv auf. Abbruchbedingung ist, dass die übergebene Zeichenkette die Länge L erreicht hat. Dann wird sie ausgegeben. Man kann einen globalen Zähler für jede Ausgabe mitzählen und immer eine Leerzeile zusätzlich ausgeben, wenn der Zähler ohne Rest durch L teilbar ist.
Danke für deinen Code. Leider kann ich mit ihm nichts anfangen. Ich hatte mir etwas einfachers erhofft. Ich werde vielleicht doch noch was eigenes versuchen und dir dann das mailen.
Danke für deinen Code. Leider kann ich mit ihm nichts
anfangen.
Was er geschrieben hat ist die generische, an alle möglichen Zeichenfolgen und Zeichentypen automatisch anpassbare Lösung. Das ist an sich die „gute“ Lösung und die sollte man auch verstehen.
Die simple, nicht generische Lösung für schreibfaule ist (pseudo-Code):
char[] chars = {"A","B","C",...}
for (i=0;i
Wer stellt euch eigentlich solche Hausaufgaben?
cu
genau die Leute, die dafür verantwortlich sind, dass ich solche „Schüler“ einer kompletten Gehirnwäsche unterziehen darf, wenn sie hier eingestellt werden…
nun muss ich doch mit der Wahrheit rausrücken Also ich habe mir eine kleines Proggi gemacht, was in einem Wort ungerade Buchstaben (im Alphabet) nach „A“ umwandelt und alle geraden Buchstaben zu „B“. Klar nun, warum ausgerechnet 13 Werte… Nun dachte ich, du musst das ja nun zurück auch können… Leider fehlte mir der passende Anstoß… Das Projekt ist reine Freizeitaktivität, also Hobby.
nun muss ich doch mit der Wahrheit rausrücken Also ich
habe mir eine kleines Proggi gemacht, was in einem Wort
ungerade Buchstaben (im Alphabet) nach „A“ umwandelt und alle
geraden Buchstaben zu „B“.
So weit, so klar.
Nun dachte ich, du musst das ja nun zurück auch
können…
Dann hab ich die ursprüngliche Frage nicht verstanden.
Das kann nicht verlustfrei gehen. Du schmeisst ja 13 Werte zusammen in einen Topf. Welcher Wert es ursprünglich war ist danach nicht mehr ermittelbar.
Hat jemand eine Lösung, ein Gerüst, oder irgendeinen Ansatz
für mich für dieses Problem?
Muß es denn in C# sein? In Perl ist das zum Beispiel
schon eingebaut, das sähe so aus:
# Erzeugen
my @strings = glob "{A,B,C,D,E,F,G,H,I,J,K,L,M}" x 2 ;
# Ausgeben
print "$\_\n" for @strings;
# Resultat:
# AA
# AB
# AC
# ..
# MM
# (169 Zeilen)
Letztlich ist es simple Kombinatorik. Welche Lösung
hast Du denn bisher?
Dann hab ich die ursprüngliche Frage nicht verstanden.
Das kann nicht verlustfrei gehen. Du schmeisst ja 13 Werte
zusammen in einen Topf. Welcher Wert es ursprünglich war ist
danach nicht mehr ermittelbar.
stimmt, dass soll auch sinn der sache sein. nur möchte ich halt alle möglichkeiten ausgegeben haben. sonst könnt ich ja das ja eins zu eins machen… ich habe auch ne idee, dass dann etwas z.b. in AACBBBCAAABB o.ä codiert wird, aber das wollte ich bewusst hier raushalten der string vor der ausgabe soll dazu dienen ihn auf muster/worte zu untersuchen.