import (
"fmt"
"math/rand"
"time"
)
func main() {
//初始10个红包, 10000元钱
count, amount := int64(10), int64(10000)
//剩余金额
remain := amount
//验证红包算法的总金额,最后sum应该==amount
sum := int64(0)
//进行发红包
for i := int64(0); i < count; i++ {
x := DoubleAverage(count-i, remain)
//金额减去
remain -= x
//发了多少钱
sum += x
//金额转成元
fmt.Println(i+1, "=", float64(x)/float64(100))
}
fmt.Println()
fmt.Println("总和 ", sum)
}
//二倍均值算法,count剩余个数,amount剩余金额
func DoubleAverage(count, amount int64) int64 {
//最小钱
min := int64(1)
if count == 1 {
//返回剩余金额
return amount
}
//计算最大可用金额,min最小是1分钱,减去的min,下面会加上,避免出现0分钱
max := amount - min*count
//计算最大可用平均值
avg := max / count
//二倍均值基础加上最小金额,防止0出现,作为上限
avg2 := 2*avg + min
//随机红包金额序列元素,把二倍均值作为随机的最大数
rand.Seed(time.Now().UnixNano())
//加min是为了避免出现0值,上面也减去了min
x := rand.Int63n(avg2) + min
return x
}
golang红包算法
原创
©著作权归作者所有:来自51CTO博客作者盼盼编程的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:golang逃逸分析
下一篇:golang中的tar-gz
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
8种超简单的Golang生成随机字符串方式
go语言中,有没有什么最快最简单的方法,用来生成只包含英文字母的随机字符串。
go语言 Bytes Golang -
高并发抢红包系统红包随机金额生成算法
有随机金额之和
算法 java 二倍均值法 随机数 数组 -
Glup 和 Vite
Glup 适合任务流式处理(文
前端 javascript gulp Webpack 依赖图 -
智能缓存架构:AI预测数据热点
智能缓存架构通过“预测数据热点”实现了缓存策略的主动化与动态化,解决了传统规则驱动缓存的滞后与低效问题。在高并发、高波动的业务环境下,它是系统稳定性和用户体验的关键保障。
#缓存 #架构 #人工智能 #系统优化 #架构设计
















