以下是從1到45範圍內的號碼樂透模擬的必要解決方案,每當我們產生一個數字n1時,號碼從可能的集合中移除數字。斯卡拉:模擬樂透號碼發生器範圍1至45
是否有可能以更實用的方式實現相同?即使用圖,過濾器等
def getNumbers :Array[Int] = {
val range = 1 to 45
var set = range.toSet
var resultSet:Set[Int] = Set()
var current: Int = 0
while(resultSet.size < 5){
current = Random.shuffle(set).head // pick the head of the shuffled set
set -= current
resultSet += current
}
resultSet.toArray
}
「編輯」
一個例子挑3號從範圍1到5
Original Set is {1,2,3,4,5}
{1,2,3,4,5} shuffle(1) picked at random 3
{1,2,4,5} shuffle(2) picked at random 2
{1,4,5} shuffle(3) picked at random 4
original Set becomes {1,5}
numbers picked {3,2,4}
各洗牌隨機化一組不同的! =>不同的概率
我希望看到一個功能性的「方法」,5個洗牌不是1洗牌!
對不起,但不同的排序影響不成立的可能性的假設。功能解決方案與您在統計基本書中所描述的一樣。您的額外限制或模擬將模擬繪圖的行爲,但不足以形成真正的功能解決方案。 – 2015-03-13 22:16:15
不是訂單,大小不一樣,每次洗牌後減少一次 – firephil 2015-03-13 22:21:47