Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Alle Kombinationen einer Liste ausgeben - Permutation (?)
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

Alle Kombinationen einer Liste ausgeben - Permutation (?)

beantworten | zitieren | melden

Hallo liebe Community,

ich weiß nicht, ob meine Themenbezeichnung treffen ist, jedoch kommt sie meiner Beschreibung des möglichen Szenarios am nächsten.

Es geht um folgendes:

Für ein Spiel das ich aus Hobbyzwecken programmiere, benötige ich eine Funktion, die mir anhand einer beliebigen Anzahl Wörter folgendes Muster ausgibt:

Bsp:

meineFunktion(['Apfel', 'Birne']);

Ausgabe:

Apfel - 0 Birne - 0
Apfel - 0 Birne - 1
Apfel - 0 Birne - 2
Apfel - 1 Birne - 1
Apfel - 1 Birne - 2
Apfel - 2 Birne - 2

Bei 3 Wörtern wäre die Ausgabe wie folgt:

meineFunktion(['Apfel','Birne','Tomate']);

Apfel - 0 Birne - 0 Tomate - 0
Apfel - 0 Birne - 0 Tomate - 1
Apfel - 0 Birne - 0 Tomate - 2
Apfel - 0 Birne - 1 Tomate - 1
Apfel - 0 Birne - 1 Tomate - 2
Apfel - 0 Birne - 2 Tomate - 2
Apfel - 1 Birne - 1 Tomate - 1
Apfel - 1 Birne - 1 Tomate - 2
Apfel - 1 Birne - 2 Tomate - 2
Apfel - 2 Birne - 2 Tomate - 2


Leider stehe ich total auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht mehr... Danke für eure Hilfe!

Liebe Grüße,
reloop
private Nachricht | Beiträge des Benutzers
Gwinn
myCSharp.de - Member



Dabei seit:
Beiträge: 47

beantworten | zitieren | melden

Ist jetzt nicht schön, sollte aber funktionieren.
Das Zauberwort dabei ist Rekursion.


        static List<string> ausgabestring(string prefix, int startindex, List<string> obst)
        {
            List<string> weniger_obst=new List<string>(obst);

            List<string> output=new List<string>();
            if (obst.Count > 0)
            {
                weniger_obst.RemoveAt(0);
                for (int i = startindex; i ≤ 2; i++)
                {
                    output.AddRange(ausgabestring(prefix + " " + obst[0] + " " + i, i, weniger_obst));
                }
            }
            else 
                output.Add(prefix);
            return output;
        }

Gruß Gwinn
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Gwinn am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.196

beantworten | zitieren | melden

Um den Baum sichtbarer zu machen: einfach eine rekursive Methode mit einer einzigen For-Schleife und dem prefix als Übergabe.
Den fertigen Code werd ich Dir da aber nicht machen, sorry ;-)
private Nachricht | Beiträge des Benutzers