在抽奖时,奖品池会有不同的奖品,不同的奖品价格不一样,或者稀有度也不一样,价格低或者稀有度低的奖品,我们希望他它出现的概率高一点,而价格高或者稀有度高的奖品,我们希望它出现的概率低一点 比如现在有四种类型的产品,要出现的概率比例是 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以上的随机数,然后判断随机数处于哪一个分区即可
网友评论