2015-04-20 12 views
6

Ich versuche, einen Zufallszahlengenerator zu entwerfen, der Zufallszahlen von 0-11 generiert. Aber ich muss entwerfen, dass ich bereits einen Zufallszahlengenerator habe, der eine Zufallszahl von 0-5.All generiert die Zahlen von 0-11 sollten mit gleicher Wahrscheinlichkeit erzeugt werden.Entwerfen eines Zufallszahlengenerators

I ging dies durch link

In der Verknüpfung verwendet die Gleichung 5*foo() + foo() -5 ist, worin foo() Zahl erzeugt 1-5 (nicht 0-5)

1. For each value of first foo(), there can be 5 possible combinations for values of second foo(). So, there are total 25 combinations possible. 
2. The range of values returned by the above equation is 1 to 25, each integer occurring exactly once. 
3. If the value of the equation comes out to be less than 22, return modulo division by 7 followed by adding 1. Else, again call the method recursively. The probability of returning each integer thus becomes 1/7. 

Nun kann ich die Funktion ändern, die es Modulus um 12 und recurse die Funktion, wenn die Zahl 24 überschreitet, in der Funktion, die in der Verbindung oben definiert ist? Wenn nicht, dann verstehe ich nicht, was falsch ist.

Alternativ kam ich auf diesen einen

lässt den Zufallszahlengenerator-Funktion aufrufen, die 0-5 f(6) Zahl erzeugt.

(f(6)+f(6)+f(6))%12; 

Wenn nicht, was alternative Lösung kann ich abziehen? Ich brauche Hilfe in diesen task.Maybe tun ich something.The Fang bin hier fehlt jede Zahl zwischen 0-11 gleicher Wahrscheinlichkeit generation.Other als f(6) haben sollte Ich kann keine andere Funktion verwenden. Nur mathematische Manipulationen.

+0

Willkommen bei SO: SE. Bitte lesen [fragen]. Ihr Beitrag sollte in zwei Richtungen verbessert werden: Fügen Sie die verlinkten Ressourcen relevanten Abschnitte in Ihren Beitrag ein (falls die Ressource verschoben oder gelöscht wird), und geben Sie den Code Ihres aktuellen Versuchs an. Viel Glück! – mins

+0

ist das gut? Ich brauche keinen Code, ich habe zur Verfügung gestellt, was ich versuchte ... versuchte mein Bestes, aber immer noch denke ich, dass ich etwas vermisse. – Nilesh

+0

Was Sie tun, klingt vernünftig, aber ich überlasse es jemandem, der _prove_ es kann. Ich bin rostig und die Klassen, die ich darüber gemacht habe, waren vor einer Weile. –

Antwort

2

Es gibt viele Möglichkeiten, dies zu tun, aber in diesem Fall würde ich mich für:

f(6) + 6*f(2) 

wo

f(2) = f(6)%2 

Die Wahrscheinlichkeit ist einheitlich, weil Sie eine einheitliche Wahrscheinlichkeit haben eine Zahl zu erhalten von 0 bis 5 und eine gleichförmige Wahrscheinlichkeit, es in das 6-11 Intervall zu verschieben.

1

Nennen wir Ihren 0..5 Generator g6(). Wenn Sie (6 * g6()) + g6() berechnen, erhalten Sie eine einheitliche 0..35. Jetzt teilen Sie einfach durch 3, und Sie haben eine einheitliche 0.11.

Verwandte Themen