Ist zwar die Sache mit den Zufall aber nicht so wirklich!
-
Also ich hab folgendes Programm!
#include <iostream> #include <string> #include <cstdlib> #include <ctime> using namespace std; int main() { int Teilnehmeranzahl; string Name[10]; cout<<"Wieviel Personen nehmen teil?\n"; cin>>Teilnehmeranzahl; for(int loop=0;loop<Teilnehmeranzahl;loop++) { cout<<"\nGeben Sie den Namen des "<<loop+1<<" Teilnehmer ein!\n"; cin>>Name[loop]; } srand( (unsigned)time( NULL ) ); cout<<"\nEs treten an!\n"; for(int loop1=0;loop1<Teilnehmeranzahl/2;loop1++) { cout<<Name[rand()%Teilnehmeranzahl]<<" vs. "<<Name[rand()%Teilnehmeranzahl]<<"\n"; cout<<"Referee: "<<Name[rand()%Teilnehmeranzahl]<<"\n"; } system("Pause"); }Nun ist es so das manche Namen doppelt oder dreifach ausgegeben werden! Wie kann ich das verhindern???
MfG
Sascha081088
-
Hallo,
Wie wär's, wenn du z.B. Folgendes machst:
#include <iostream> #include <string> #include <cstdlib> #include <ctime> #include <vector> #include <algorithm> // wird benötigt für random_shuffle. using namespace std; int main() { int Teilnehmeranzahl; string Name[10]; cout<<"Wieviel Personen nehmen teil?\n"; cin>>Teilnehmeranzahl; for(int loop=0;loop<Teilnehmeranzahl;loop++) { cout<<"\nGeben Sie den Namen des "<<loop+1<<" Teilnehmer ein!\n"; cin>>Name[loop]; } cout<<"\nEs treten an!\n"; // Jedem Spieler eine eindeutige ID geben. vector<size_t> player_id(Teilnehmeranzahl); for(size_t i = 0; i < player_id.size(); ++i) player_id[i] = i; random_shuffle(player_id.begin(), player_id.end()); // diese IDS tauschen. for(int loop1=0;loop1 < Teilnehmeranzahl - 2; loop1 += 3) { // Spieler mit den jeweiligen IDs gegeneinander antreten lassen. cout<<Name[player_id[loop1]]<<" vs. "<<Name[player_id[loop1 + 1]]<<"\n"; cout<<"Referee: "<<Name[player_id[loop1 + 2]<<"\n"; } system("Pause"); }Bzg. random_shuffle siehe hier.
Eine erweiterte Fehlerüberprüfung und die Verschönerung dieser hingehackten Variante überlass ich dir :).
btw:
- du musst deine Zählvariablen nicht unterschiedlich benennen. (Sie sind in der jeweiligen Schleife lokal!).
- system("Pause") ist bäh ;).Gruß Caipi
-
oder ganz simpel mit 2 dim array:
( im 2.ten feld einfach abhaken, ob der spieler schon gezogen wurde )allerdings musst du dir das mit dem schiedsrichter noch ueberlegen...

#include <iostream> #include <string> using namespace std; string Name[10][2]; int Teilnehmeranzahl; string gezogen() { int i=rand()%Teilnehmeranzahl; while (Name[i][1]>"" ) i=rand()%Teilnehmeranzahl; Name[i][1]="X"; //egal was>"" return Name[i][0]; } int main() { cout<<"Wieviel Personen nehmen teil?\n"; cin>>Teilnehmeranzahl; for(int loop=0;loop<Teilnehmeranzahl;loop++) { cout<<"\nGeben Sie den Namen des "<<loop+1<<" Teilnehmer ein!\n"; cin>>Name[loop][0]; } srand( (unsigned)time( NULL ) ); cout<<"\nEs treten an!\n"; for(int loop1=0;loop1<Teilnehmeranzahl/2;loop1++) { cout<<gezogen()<<" vs. "<<gezogen()<<"\n"; // cout<<"Referee: "<<Name[rand()%Teilnehmeranzahl][0]<<"\n"; } system("Pause"); }
-
Hi,
wenn man den Vorschlag von Caipi (random_shuffle) anwendet, kommt man auf eine ganz einfache Lösung:
#include <iostream> #include <string> #include <vector> #include <cstdlib> #include <ctime> #include <algorithm> int main() { std::srand( (unsigned)std::time( NULL ) ); size_t anzahl = 0; std::cout << "Bitte die Anzahl der Spieler eingeben:" << std::endl; std::cin >> anzahl; std::vector<std::string> spieler; for(std::size_t i = 0;i < anzahl;++i) { std::cout << "Namen fuer " << i+1 << " . Spieler angeben:" << std::endl; std::string name = ""; std::cin >> name; spieler.push_back(name); } std::random_shuffle(spieler.begin(), spieler.end()); for(int i = 0;i < anzahl;i += 2) { std::cout << spieler[i] << " vs. " << spieler[i + 1] << std::endl; } std::system("pause"); return 0; }Viel Spaß beim Ausprobieren. :xmas1: