【发布时间】:2019-09-14 19:39:53
【问题描述】:
我正在寻找一个彩票号码生成器,我发现了这个:
Sub LotteyCode()
Dim Rng As Range
Dim WorkRng As Range
Dim xNumbers(49) As Integer
On Error Resume Next
For xy = 1 To 10000
Set WorkRng = Range("A" & xy)
For xIndex = 1 To 49
xNumbers(xIndex) = xIndex
Next
For xIndex = 1 To 6
xNum = 1 + Application.Round(Rnd * (49 - xIndex), 0)
WorkRng.Offset(0, xIndex - 1).Value = xNumbers(xNum)
xNumbers(xNum) = xNumbers(50 - xIndex)
Next
Next xy
End Sub
我通读了代码,我一生都无法理解这是如何不生成重复数字的(代码没有解释为什么要这样写)...
我运行了 10000 次迭代(如“xy = 1 To 10000”所示)以确保它确实给出了唯一的数字。
如果有人能对此有所了解,我将非常感激!
【问题讨论】:
-
我相信这是 Fisher-Yates-Knuth 洗牌,en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle