2015-04-20 7 views
6

Ben zaten 0-5.All rastgele sayı üreten bir rasgele sayı üreteci sahip dikkate olduğunu tasarlamak gerekir 0-11.But gelen rastgele sayılar üreten bir rasgele sayı üreteci tasarımı çalışıyorum tasarlama 0-11 arasındaki sayılar eşit olasılıkla oluşturulmalıdır.bir rastgele sayı üreteci

kullandığım denklem foo() Şimdi sayısı 1-5 (değil 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. 

oluşturur i modülü fonksiyonu değiştirebilir, burada 5*foo() + foo() -5 olan bağlantıyı bu link

geçti 12'ye kadar sayıyı tekrarlarsa ve sayı, yukarıdaki bağlantıda tanımlanmış olan fonksiyonda 24'ü aşarsa, neyin yanlış olduğunu anlayamıyorum.

Alternatif ben numarayı 0-5 üretir rasgele sayı üreteci işlevini f(6) arama sağlar bu bir

üzerine geldi. Alternatif çözüm ben ne düşebilirsiniz Değilse

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

? Ben burada something.The catch Eksik bu task.Maybe yaparken yardıma 0-11 arasındaki her sayı f(6) daha generation.Other eşit olasılığına sahip olmalıdır ihtiyacımız olan Başka bir işlevi kullanamıyorum. Sadece matematiksel manipülasyonlar.

+0

SO'ya hoş geldiniz: SE. Lütfen [sor] 'u okuyun. Yayınınız iki yönde geliştirilmelidir: Kaynağınızda bağlı kaynakla alakalı bölümleri ekleyin (kaynağın taşınması veya silinmesi durumunda) ve mevcut girişinizin kodunu girin. İyi şanslar! – mins

+0

bu iyi mi? Bir koda ihtiyacım yok, denediğimi sağladım ... elimden geleni denedim ama hala bir şeyleri kaçırdığımı düşünüyorum. – Nilesh

+0

Yaptığınız şey mantıklı geliyor ama onu _prove_ edebilecek birine bırakacağım. Paslıyım ve aldığım dersler bir süre önce. –

cevap

2

Bunu yapmanın birçok yolu vardır, ancak bu durumda ben giderdim için:

f(6) + 6*f(2) 

nerede

f(2) = f(6)%2 

bir numarası almak için tek tip bir olasılık var çünkü olasılık üniforma 0'dan 5'e kadar ve 6-11 aralığına kaydırmak için eşit bir olasılık.

1

) (senin 0..5 jeneratör g6 diyelim. Eğer hesaplarsanız (6 * g6()) + g6(), bu size bir üniforma 0..35 verecektir. Şimdi sadece 3 ile bölün, ve sen bir üniforma 0..11 olacak.