rand()
-
Hallo,
ich suche eine möglichkeit, um über einen zufallsgenerator
mehrer verschiedene Zahlen auszugeben.
Diese dürfen aber nicht identisch sein.Danke
-
genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl:
#include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand(time(NULL));//einmal bei Programmstart for(int i=0;i<100;++i) cout<<i<<'\t'<<rand()<<endl; return 0; }
-
CStoll (off) schrieb:
genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl
Aber die können durchaus identisch zu vorherigen sein.
@ Caesar0808:
Bleibt dir wohl nix anderes übrig als die Zufallszahlen zu merken und dann bei jeder neuen Zufallszahl zu überprüfen ob es die schon einmal gab.
-
Einmal kannst du es so machen, wie TactX vorgeschlagen hat. Dann beispielsweise mit einem std::set, um die Suchen zumindest halbwegs erträglich zu halten.
Alternativ generierst du eine beliebig lange Zahlenfolge (z.b. die Zahlen von 1 - 100) in ein Array/Vektor und würfelst die dann mit random_shuffle durch.
-
Oder Variante c) man nimmt einen Zufallszahlengenerator der sich erst wiederholt wenn jede Zahl einmal dran war
-
Any schrieb:
Oder Variante c) man nimmt einen Zufallszahlengenerator der sich erst wiederholt wenn jede Zahl einmal dran war
Das ist nett. Aber wenn man nicht den gesamten Bereich des RNGs benutzen will bringt einem das leider nicht so viel.
-
CStoll (off) schrieb:
genau das macht rand() - es erzeugt bei jedem Aufruf eine neue Zufallszahl:
#include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() { srand(time(NULL));//einmal bei Programmstart for(int i=0;i<100;++i) cout<<i<<'\t'<<rand()<<endl; return 0; }hi ich hab's so gemacht nur das ich anstatt i=0; i<100---> a =1; a<4 hab weil die zahl zwischen 1 und 3 sein soll...
und anstatt cout<<... hab ich b = rand()
wo geb ich den bereich ein (1-3) weil nur misst raus kommt...mfg
Beasly
-
Hallo
Wenn du Zahlen zwischen 1 und 3 erzeugen willst, musst du folgendes tun:
int iZufallsZahl = rand()%3; //bringt dir Zahlen zwischen 0 und 2Dann addiert du halt noch 1.
Die Schleife dient nicht zur Begrenzung der Zufallszahlen, sondern nur der Begrenzung der Ausgabe.
chrische