如何实现指定概率的随机事件(Golang)

1,268 阅读1分钟

设计思路:指定一个从0开始的自然数范围,让不同的概率分别占有一定的比例,然后使用均匀的随机数打中该范围即可。

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    // 设定概率: A:10%, B:20%, C:30%, D:40%
    rateList := make(map[uint32]int32)
    rateList[0] = 10
    rateList[1] = 20
    rateList[2] = 30
    rateList[3] = 40
    
    // 累计记录命中次数,200000000次循环
    counterList := make([]int, 4)
    for x := 0; x < 200000000; x++ {
        randNum := rand.Int31n(99)
        min, max := int32(0), int32(0)
        // 查看命中情况
        for k, span := range rateList {
            max = min + span - 1
            if randNum >= min && randNum <= max {
                counterList[k]++
                break
            }
            min += span // 进入下一范围
        }
    }
    for _, b := range counterList {
        fmt.Print(float32(b)/2000000, " ")
    }
}