Zum Inhalt springen

Array Werte nur ein mal benutzen


Empfohlene Beiträge

Geschrieben

Tag, ich bin mir nicht sicher wie ich den Titel nennen soll, naja mal sehn.

Also, ich habe folgendes Problem:

Ich habe ein Array mit 20 Werten (Namen) jetzt will ich das 5x eine Konstellation von 4 Namen durch Zufall ausgewählt und ausgegeben wird.

Hintergrund ist hier ein Sport- Wettkampf:

Es gibt 20 Personen es spielen immer 2 gegen 2 und nach jeder Runde sollen alle Leute durcheinandergeworfen werden so dass möglichst nie 2 gleiche Leute zusammen oder gegeneinander spielen.

Es gibt 5 Runden und in jeder Runde 6 Spielfelder, also 6 x 4 Personen die bestimmt werden müssen.

Zu einfachheithalber habe ich keine Namen sondern erstmal nummern ins Array geschrieben, hier ist mein Ansatz:

Es läuft 5x die Schleife durch in der jeweils 4 Personen ausgewählt werden und das wird ausgegeben.


for(int j = 0;j<5;++j){


for(int i = 0;i<2;++i){

       zufall = (rand() % 20) +1; 

cout << namen[zufall] << endl;

}

cout << "spielen gegen: " << endl;

for(int i = 0;i<2;++i){

       zufall = (rand() % 20) +1; 

cout << namen[zufall] << endl;

}

cout << "-----" << endl;

}

Das Problem dabei ist folgendes: Ich weis nicht so recht wie ich verhindern soll das Personen doppelt genommen werden, die Idee war alle gewählten Zahlen in ein Array zu schreiben wo jedesmal bei der Zufalls Zahl abgeglichen wird ob diese bereits verwendet wurde.

Das würde das Problem für 1 Runde lösen.

Wie ich es aber hinbekommen kann das in der 2ten Runde nicht die selben gegeneinander spielen hab ich keine Ahnung, irgendwie müsste man die Zahlenpaare irgenwo aufschreiben und immer abgleichen.

Vielleicht hat jemand von euch einen Tipp.

Danke

Geschrieben

statt eines arrays würde ich eine, bzw mehrere, liste(n) nutzen. aus denen würde ich jeweils das gerade ermittelte element entfernen. dann müssten auch die zufallszahlen anhand der größe der liste ermittelt werden.

bei 20 personen und 6 spielfeldern die mit je 4 personen besetzt sein müssen, hast du aber prinzipiell ein problem. nach dem 5ten spielfeld gehen dir die leute aus.

als nächstes musst du dir merken wer gegen und mit wem gespielt hat, was wohl zu einer personen-klasse führen wird.

Geschrieben

bei 20 personen und 6 spielfeldern die mit je 4 personen besetzt sein müssen, hast du aber prinzipiell ein problem. nach dem 5ten spielfeld gehen dir die leute aus.

Das ist ja ein Organisatorisches Problem, 6 Felder ist ja ein Maximum und muss nicht ganz ausgenutzt werden.

Ausserdem will ich es am Ende so schreiben das eine beliebige Anzahl von Leute gewählt werden kann, aber das kommt wenn cih fertig bin dazu.

Ich schau mir das mit Listen mal an, hab damit noch gar keine Erfahrung, die nächsten Fragen zu den Listen stell ich dann auch einfach hier.

danke.

Geschrieben

Mit der Funktion std::random_shuffle kannst du dein Array schön durchmischen.

Um aber wirklich Wiederholung so weit wie möglich zu vermeiden, musst du vom Zufall weg und dir etwas anderes überlegen.

Für 20 Leute reicht ein einfaches Rotationsschema:

Nennen wir die Positionen bei einer Begegnung A, B, C und D. Dann wird nach jeder Runde folgendermaßen rotiert: Die Spieler auf A bleiben, wo sie sind. Die Spieler auf B gehen ein Spielfeld weiter, die Spieler auf C zwei Spielfelder und die auf D drei Spielfelder. Dabei sollte sich eigentlich nichts wiederholen, wenn ich mich nicht verrechnet habe.

Geschrieben

Für 20 Leute reicht ein einfaches Rotationsschema:

Ja, aber es gibt keine festen Teams, also alle Spieler werden wieder durchgemischt zu neuen Teams, das wäre eine ewige Kleinarbeit alle Konstellationen zu überlegen, das wollte ich ja von nem Programm übernehmen lassen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...