有没有更好的方法来设置生成随机数和控制限制的几率?

时间:2016-09-17 12:11:13

标签: vb.net visual-studio-2010

我正在尝试做一场有​​20轮比赛的比赛。我已经指定0到8代表游戏中的项目。我需要90%的随机数为0到5的任何数字。我需要数字6和7为4%的时间。并且,我需要8只有2%的时间。下面是我的代码,它有时会起作用,但通常会生成太多的6s,7s和8s。我看到代码的方式是它应该在大多数情况下正常工作但不能。是否有更好的方法来控制随机数以获得我需要更一致的百分比?

' Get the random number position into array
Public Sub GetNumPositions(ByVal positions() As Integer)
    ' 20 rounds, each round 5 numbers
    ' we want 2 times (8), 4 times (6 and 7)
    ' 2% 8, 4% 6, 4% 7, and 90% times 0 thru 5
    For i As Integer = 0 To positions.Length - 1
        Dim p As Integer = rndNums.Next(100)

        If p < 90 Then
            positions(i) = p \ 15
        ElseIf p < 94 Then
            positions(i) = 6
        ElseIf p < 98 Then
            positions(i) = 7
        Else
            positions(i) = 8
        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

你的代码很好。这是一种测试它的方法。它收集一些数字并计算它们的频率:

Sub Main()
    Dim count = 100000000
    Dim positions(count) As Integer
    Dim frequencies(9) As Integer
    GetNumPositions(positions)
    For Each num In positions
        frequencies(num) += 1
    Next
    For i As Integer = 0 To 8
        Console.WriteLine(i & ": " & (100.0 * frequencies(i) / count) & " %")
    Next
End Sub

结果是:

0: 14.994567 %
1: 15.000016 %
2: 15.01366 %
3: 14.996542 %
4: 15.002074 %
5: 15.00325 %
6: 4.002246 %
7: 3.999337 %
8: 2.000603 %

如您所见,频率与您的输入分布非常接近。