2016-08-15 3 views
-3

Ich frage mich, ob ich die rand() -Funktion verwenden kann, um zufällig zwischen 2 Variablen zu wählen. Sag, ich habe ding1 und ding2, kann rand() einen von ihnen für mich auswählen?Auswahl zwischen 2 oder mehr Variablen mit rand()

Mein aktueller Code nur verwendet rand() eine Zufallszahl zu erzeugen, und ich sage, wenn seine ungerade dann thing1 und wenn selbst dann thing2 aber wenn ich thing3 dann fügen Sie es nicht funktionieren ..

+1

Die Art, wie Sie es gemacht haben, ist genau die Art, wie Sie es tun. – ckruczek

+0

Ist es Ihnen gelungen, zwischen 2 Variablen zu wählen oder nicht? –

+0

Wenn die Variablen alle denselben Typ haben, wäre es besser, ein Array als N verschiedene Variablen zu verwenden; Sie würden das Ergebnis von 'rand()' auf '[0..N-1]' abbilden (mit der in der akzeptierten Antwort der verknüpften Frage beschriebenen Methode), wobei 'N' die Anzahl der Elemente in Ihrem Array ist . –

Antwort

0

Angenommen, Sie haben n Dinge . Erzeugen Sie zunächst eine Zufallszahl in einem Bereich von 0 bis (k*n)-1, wobei k eine positive ganze Zahl ist. Dann dividiere die generierte Zahl durch k. Sie erhalten eine Nummer von 0 bis n-1. Karte 0 bis ding1, 1 bis ding2, und so weiter, bis Sie n-1 zu thing n.

Oder noch einfacher, erzeugen Sie einfach eine Zufallszahl von 0 zu n-1 und führen Sie die Zuordnung wie oben.

1

Die Funktion rand gibt eine Zahl zwischen 0 und RAND_MAX zurück. inklusive.

Teilen Sie diesen Bereich in X Unterbereiche, wobei X die Anzahl der "Variablen" ist, die Sie haben. Wenn der zurückgegebene Wert innerhalb des ersten Unterbereichs liegt, verwenden Sie die erste "Variable". Wenn der zurückgegebene Wert innerhalb des zweiten Teilbereichs liegt, wählen Sie die zweite Variable aus.

usw.

Sie können auch den Modulo-Operator verwenden, um einen Wert im Bereich von 0 bis X zu erhalten, wobei X wieder die Anzahl der „Variablen“ Sie haben. Verwenden Sie dann diese einzelne Zahl, um die "Variable" auszuwählen (indem Sie sie beispielsweise als Index für ein Array verwenden).

Diese Methode mit Modulo ist nicht perfekt. Siehe z.B. this old answer für warum und für einen besseren Weg.

Verwandte Themen