go实现不同概率抽奖

2022-10-26  本文已影响0人  彳亍口巴

在抽奖时,奖品池会有不同的奖品,不同的奖品价格不一样,或者稀有度也不一样,价格低或者稀有度低的奖品,我们希望他它出现的概率高一点,而价格高或者稀有度高的奖品,我们希望它出现的概率低一点 比如现在有四种类型的产品,要出现的概率比例是 80:10:5:5


package main

import (
    "fmt"
    "math/rand"
    "time"
)

var (
    one   int32
    two   int32
    three int32
    four  int32
)

func main() {
    rand.Seed(time.Now().Unix())
    lottery()
}

func lottery() {
    for a := 0; a < 100; a++ {
        res := Algorithm()
        if res <= 8000 {
            one++
            continue
        }
        if res <= 9000 {
            two++
            continue
        }
        if res <= 9500 {
            three++
            continue
        }
        if res <= 10000 {
            four++
            continue
        }
    }
    fmt.Println(one, two, three, four)
}

func Algorithm() int {
    start := 0
    var end int
    //probabilities,一共几个概率事件,另外各自概率是多少 必须相加=10000
    probabilities := []int{8000, 1000, 500, 500}
    rand := rand.Intn(10000) //0-10000的随机数共10000个数
    for _, probability := range probabilities {
        end += probability
        if start <= rand && end > rand {
            return rand
        }
        start = end
    }
    return -1

}

在函数Algorithm中probabilities := []int{8000, 1000, 500, 500}将1000以内的数据划分为4个区域,分别是0-8000,8000-9000,9000-9500,9500-10000
每次都产生一个10000以上的随机数,然后判断随机数处于哪一个分区即可

上一篇 下一篇

猜你喜欢

热点阅读