发红包公平算法

编程入门 行业动态 更新时间:2024-10-27 10:27:03

发红包公平<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法"/>

发红包公平算法

微信随机红包算法

注意1:保证随机公平性。要和先后随机无关,即每随机者的红包收益期望和分布是一致的
注意2:保证钱的精确度为 “分 ” (即 0.01元)。在分取整的过程中公平性不能变化。
扩展:假设每人致少分得0.01元怎么处理

// 解决的思路就是个人随机权值 ,每个人分的比例等于自己权值比上总权值
//以下是伪代码写下思路
用户个数 =10 //用户的个数 初始化为10人
总钱数 = 10000 //需要分的钱数这里以分为单位 10000即100元
权值数组[用户个数] //存储用户分钱比重
用户分钱整数部分数组[用户个数] //用户分得的钱数整数部分(即整数分)
用户分钱小数部分数组[用户个数] //用于处理整数分钱后的余额 存贮为小数部分余额(即小于分的单位)
临时变量权值和 = 0
for (i=1,i<用户个数 )
{
权值数组[用户个数] = random(0 ,1) //随机给每个抢红包用户分配权值
权值和 += 权值数组[i] // 在这里算下权值的和 顺便累加下
}
余额 = 总钱数 //用户根据随机权值分配后取整 剩下的及是余额 即不能精确到分(0.01元)的数
for (i=1,i<用户个数 )//根据每个人权值
{
用户分得钱数 = 100 * 权值数组[i] /权值和
用户分钱整数部分数组[i] = 取整(用户分得钱数 精确到分的 )
用户分钱小数部分数组[i] = 取小数( 用户分得钱数 分以下的)
余额 = 余额 - 用户分钱数组的整数部分 //为节省效率 在这里统计下余额
}

//分配余额 根据用户分钱小数部分数组进行排序 排序靠前的人分得1分钱 这里不详细写了

//扩展那个 每个用户至少分0.01元, 相当于每人先发1分钱, 然后剩下的99.9元随机分配。即上面算法,只是变量修改。

更多推荐

发红包公平算法

本文发布于:2024-02-26 09:45:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1702067.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   公平   发红包

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!