用go写一个红包算法
package main
import ( "fmt" "math/rand" "time" )
// 红包结构体 type RedEnvelope struct { TotalAmount float64 // 红包总金额 Num int // 红包个数 }
// 发红包函数 func SendRedEnvelope(re *RedEnvelope) []float64 { result := make([]float64, re.Num) // 存放结果的数组 leftAmount := re.TotalAmount // 剩余金额 leftNum := re.Num // 剩余红包个数 rand.Seed(time.Now().UnixNano()) // 设置随机种子,确保每次随机的结果不同
for i := 0; i < re.Num-1; i++ {
// 随机分配红包金额
amount := rand.Float64() * leftAmount / float64(leftNum)
result[i] = amount
leftAmount -= amount
leftNum--
}
// 最后一个红包金额为剩余金额
result[re.Num-1] = leftAmount
return result
}
func main() { re := RedEnvelope{ TotalAmount: 100.0, Num: 10, } result := SendRedEnvelope(&re) fmt.Println(result) }
原文地址: http://www.cveoy.top/t/topic/uih 著作权归作者所有。请勿转载和采集!