2010-09-30 5 views

Antwort

35

erzeugen eine Zufallszahl zwischen 0 und 2100 dann 100.

Eine schnelle Google-Suche eine decent looking article on using Rand(). aufgedreht subtrahieren Es enthält Codebeispiele für die am Ende des Artikels mit einem bestimmten Bereich zu arbeiten.

4

Können Sie eine Zahl von 0-2100 erzeugen und 100 subtrahieren?

6

Generieren eine Zufallszahl zwischen 0 und 2100, und subtrahieren 100.e

3

Hier ist der Code ist.

#include <cstdlib> 
#include <ctime> 

int main() 
{ 
    srand((unsigned)time(0)); 
    int min = 999, max = -1; 
    for(size_t i = 0; i < 100000; ++i) 
    { 
     int val = (rand()%2101)-100; 
     if(val < min) min = val; 
     if(val > max) max = val; 
    } 

} 
+0

Dies wird keine gleichmäßige Verteilung geben! Auch das Finden des Minimums und Maximums von 100000 solcher Zahlen ist für die Frage nicht relevant. – darklon

+0

Auch wenn "val" jedes Mal '-100' war, wäre das resultierende' max' falsch. Dito für Minimum. –

+0

@Cornelius, @Ben: Wen interessiert das? Es ist nur eine Demo. Wenn ich nur '(rand()% 2101) -100' gepostet hätte, wäre das besser als ein kompilierbares, lauffähiges Beispiel gewesen? Bitte. –

1

Derzeit meine C++ Syntax ist ein wenig rostig, aber Sie sollten eine Funktion schreiben, die zwei Parameter nimmt: size und offset.

Sie erzeugen also Zahlen mit dem angegebenen size als Maximalwert und fügen danach den (negativen) Offset hinzu.

würde die Funktion wie folgt aussehen:

int GetRandom(int size, int offset = 0); 

und würde mit in Ihrem Fall aufgerufen werden:

int myValue = GetRandom(2100, -100); 
5

können Sie die Zufallsfunktionen C++ TR1 verwenden erzeugen Zahlen in der gewünschten Verteilung.

std::random_device rseed; 
std::mt19937 rng(rseed()); 
std::uniform_int<int> dist(-100,2100); 

std::cout << dist(rng) << '\n'; 
+0

Für diejenigen ohne TR1 ist boost :: random ziemlich nah. – MSalters