Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Array Werte nur ein mal benutzen

Empfohlene Antworten

Veröffentlicht

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

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.

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.

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.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.