首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VB 依概率生成隨機數:0~2 概率 1:2:3 映射 0~5 區間

     編輯:程式設計疑難解答

映射原理

總份數 = 1+2+3 = 6。生成 0~5 均勻隨機數:

  • 0 → 輸出 0 (1/6)
  • 1,2 → 輸出 1 (2/6)
  • 3,4,5 → 輸出 2 (3/6)

代碼

Randomize
Dim r As Integer
r = Int(Rnd() * 6)  ' 0~5
Dim result As Integer
Select Case r
    Case 0: result = 0
    Case 1, 2: result = 1
    Case 3, 4, 5: result = 2
End Select
MsgBox result

通用函數

Function WeightedRandom(weights() As Long) As Integer
    Dim total As Long, i As Long
    For i = LBound(weights) To UBound(weights)
        total = total + weights(i)
    Next
    Dim r As Long: r = Int(Rnd() * total) + 1
    Dim sum As Long
    For i = LBound(weights) To UBound(weights)
        sum = sum + weights(i)
        If r <= sum Then WeightedRandom = i - LBound(weights): Exit Function
    Next
End Function
' 調用
Dim w(2) As Long: w(0)=1: w(1)=2: w(2)=3
MsgBox WeightedRandom(w)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved