2014-04-21 33 views
-1

我有5個骰子,我把他們每個人擲一次:說結果是骰子[] = {1,1,1,1,1}來映射一個數組範圍內的數字,以統一隨機1到100

這骰子[]數組是輸入到功能說

int random (dice) { 
    //do some thing with the dice values { 1, 1, 1, 1, 1 } (as input from user) 

    //return a uniform random number between 1 to 100 

} 

規則:只隨機源是骰子數組中的值。我怎麼可能每個值的數量在1到100,這樣得到的數值幾乎是一致的一代

請幫助

回答

1

您可以通過1,6,6^2乘以骰子上的數字,6^3,6^4。然後將它們加起來並取結果的最後兩位數字(也就是說,在最後做一個%100)。

編輯(感謝PJS)

最後一步,加1,使您獲得1和100之間的答案,而不是99之間0和

+0

不要忘記添加一個將範圍從[0,99]移至[1,100]。有些垃圾箱比其他垃圾箱稍多一些,但這是不可避免的,因爲6 ** 5不能被100整除。 – pjs

+0

@pjs哦,關於+1的好點。我知道這不是完全統一的,但是指定了「幾乎統一的一代」的問題。 –

+0

是的,我注意到「幾乎」。我仍然明確地檢查了它,並且二進制計數都是77或78,即它們只相差一個。我看不出如何做得更好。 – pjs

0

聽起來像你想生成1到100之間的隨機數。您可以查看C++ rand()函數如何工作here或Java Math.random()函數here

+0

不會。問題是「隨機性的唯一來源是骰子數組中的值」。 –

相關問題