2009-12-13 38 views
0

基本上我必須使用一個隨機函數,它可以返回0和2^16-1之間的數字。嘗試在一個數字(LUA)中生成幾個數字間隔

我想利用這一點,並生成讓我們說,6和6之間的間隔(思考骰子撲克)。基本上使用一個隨機爲我生成的數字(我只能指定範圍),最好只需要調用一次。然後取這個數字,並將其「分成」6個骰子,其值將在1-6之間。

我對使用的技術有點不確定,想到的一點是掩蓋,但我不確定這是否是正確的上下文。

從二元角度來看,骰子值在0-5之間是合理的。那會給我們二進制數字000-101。現在,隨機函數返回值的最大值是101101101101101101(六個骰子,每個都是「6」),十進制表示隨機int返回值的上限爲187245.下限爲0.現在,讓我們說隨機函數返回數字66508,使其成爲二進制形式,我們得到010 | 000 | 001 | 111 | 001 | 100,這還不夠好!在這種情況下,其中一個骰子是111 = 7,當間隔應該是0-5(1-6)時,我們不能得到這個結果:(

我需要找出一個小數點限制範圍可以包含6個骰子與值1-6(0-5),但我在一些需要援助。

+0

不要用二進制位屏蔽做...在基地6工作a在馬克·拜爾斯的回答中。 –

+1

這個問題與Lua有什麼關係? – lhf

回答

2

可以使用值x % 6(x/6) % 6(x/6^2) % 6,...,(x/6^5) % 6其中x是如果你這樣做,會有一個偏差,如果你想避免這個偏差,你應該拒絕x並重新選擇,如果它大於6 ** 6-1

+0

可愛!我確信mod會被用在解決方案中。 :) – Vlad

+0

有關如何使用模數生成0到n之間的統一隨機數的一個很好的算法,您可以看到'java.util.Random.nextInt(int)':http://java.sun.com/javase/6 /docs/api/java/util/Random.html#nextInt(int) – Joey

相關問題