我正在尝试做一场有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
答案 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 %
如您所见,频率与您的输入分布非常接近。