Lottogen, doppelte Zahlen vermeiden
-
for(int i = 0; i < 6; i++) { int x = 0; while(!x) { x = (rand() % 49) + 1; for(int j = 0; j < i; j++) if (zahlen[j] == x) x = 0; } zahlen[i] = x; }
-
ich finde "asdasdasd" vector methode am besten.
Aber er funktioniert nicht ?
Vielleicht so:#include <iostream> #include <vector> #include <algorithm> #include <ctime> int main() { std::vector<int> ZahlenVec; srand(time(0)); for (int i = 1; i <= 49; ++i) { ZahlenVec.push_back(i); } std::random_shuffle(ZahlenVec.begin(), ZahlenVec.end()); for (int i = 0; i < 6; ++i) { std::cout << ZahlenVec[i] << std::endl; } return 0; }hmm, das was er gemacht hat hab ich noch nicht in dieser Verwendung gesehen, wird sicher ein Grund haben, wird aber bestimmt so gehen.
korigiert mich wenn hier murks mache

EDIT return Val
-
Tim06TR schrieb:
ich finde "asdasdasd" vector methode am besten.
Aber er funktioniert nicht ?
Vielleicht so:#include <iostream> #include <vector> #include <algorithm> #include <ctime> int main() { std::vector<int> ZahlenVec; srand(time(0)); for (int i = 1; i <= 49; ++i) { ZahlenVec.push_back(i); } std::random_shuffle(ZahlenVec.begin(), ZahlenVec.end()); for (int i = 0; i < 6; ++i) { std::cout << ZahlenVec[i] << std::endl; } return 0; }hmm, das was er gemacht hat hab ich noch nicht in dieser Verwendung gesehen, wird sicher ein Grund haben, wird aber bestimmt so gehen.
korigiert mich wenn hier murks mache

EDIT return Val
Ich weiß auch gar nicht, was an meinem Algorithmus genau falsch sein soll. Die Vector-Variante müsste jedenfalls zu 100% korrekt sein. Ich sehe dort keine Fehlerquelle mehr...
Was hattest du an meinem Quellcode überhaupt geändert? Du hast ein return eingefügt, okay... Aber bei mir funktioniert das auch ohne, da 0 der Standardrückgabewert ist.
Außerdem hast du das typedef entfernt. Es kann allerdings sehr viel Tipparbeit ersparen!
Beispiel:
std::vector<int> bla; for (std::vector<int>::iterator...) { std::vector<int> x = ...; }vs.
typedef std::vector<int> V; V bla; for (V::iterator) { V x = ...; }Nur als Beispiel...
-
gehört das nicht ins c++ forum?
-
c++ forum schrieb:
gehört das nicht ins c++ forum?
Vermutlich, ja

-
Es ist doch im C++ Forum.

-
Hallo,
Phisherman schrieb:
Es ist doch im C++ Forum.

es gibt auch noch das hier:
http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html

MfG,
Probe-Nutzer
-
mit std::set gehts auch ganz einfach

-
Dieser Thread wurde von Moderator/in Marc++us aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Habs hinbekommen.
Es schaut jetzt so aus:#include <iostream> #include <time.h> #include <cstdlib> #include <conio.h> using namespace std; int main() { srand(time(NULL)); int x=(rand()%49)+1, feld[6]={0}; bool checker; feld[0]=x; cout<<feld[0]; for (int i=1; i<6; i++) { cout<<' '; x=(rand()%49)+1; while (feld[i]==0) { checker=false; for (int j=0; j<i; j++) { while (x==feld[j]) { x=(rand()%49)+1; checker=true; i--; } if (checker==false && j==i-1) { feld[i]=x; cout<<feld[i]; } } } } getch(); }
-
Ich sehe insgesamt 4 Schleifen und 3x rand(). Die Loesung ist scheisse. Du hast alle Ratschlaege ignoriert. Warum stellst du dann ueberhaupt das Problem zur Diskussion?
-
zszsd schrieb:
Ich weiß auch gar nicht, was an meinem Algorithmus genau falsch sein soll. Die Vector-Variante müsste jedenfalls zu 100% korrekt sein. Ich sehe dort keine Fehlerquelle mehr...
Bei der nicht-Vector-Variante müsste es "j = -1" statt "j = 0" heißen.
-
Phisherman schrieb:
Habs hinbekommen.
Es schaut jetzt so aus:int x=(rand()%49)+1, feld[6]={0};Initialisierst du da alle 6 Felder von 'feld' mit 0?
-
@Blue-Tiger: Ja.
@knivil: Ich kenne "set" und Vektoren nicht. Und ja, ich muss rand jedesmal neu initialisieren, da doch die Zeit benutzt wird. Mit meinem momentan C++ Wissen fällt mir auch keine andere Lösung ein. Ich habe auch nicht nach einer anderen Lösung gefragt, sondern nach einer Korrektur.
