一般抽奖是怎么实现的?在实习期间学会了一种通用的写法,在这里记录一下。
最近在学Golang语法基础,这里就用Golang来写。
package main
import (
"fmt"
"time"
"math/rand"
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
weights := [9]int{1,2,3,50,7,51,68,54,89}
var total_weight int
for i := 0; i < 9; i++ {
total_weight += weights[i]
}
println("total_weight = ", total_weight)
cur_weight := r.Intn(total_weight)
fmt.Println("cur_weight =",cur_weight)
for i:=0; i<9; i++ {
if cur_weight < weights[i] {
fmt.Println("weight_num =",i)
break
}
cur_weight -= weights[i]
}
}
这里其实我们是需要知道我们抽到的值落在权重数组的哪个元素里,用图可能形象一点。