微信红包的随机算法是怎样实现的

微信红包的随机算法是怎样实现的,第1张

我考虑了一个简单的算法:

比如100元,由10个人分,那么平均一个人是10元钱。然后付款后,系统开始分份儿。

第一份:系统由0~10元之间随机一个数,作为这一份的钱数,设x1。

第二份:剩下的钱(100-x1),系统由0~(100-x1)/(10-1)随机一个数,作为这份的钱数,设x2

。。。

第n份:剩下的钱(100-x1-x2--xn),系统由0~(100-x1-x2--xn-1)/(10-n)随机一个数,作为这个份的钱数,设为xn

当用户进来拿红包的时候,系统由0~9之间随机一个数,随机到几,就取第几份红包,然后将这个数存到list里。当之后的用户抽到相同的随机数时,则将这个数+1,如遇相同再+1,直至list满,红包发完。

红包剩余金额为 M

红包剩余数量为 N

这种算法就是每次都在区间[0,M/N×2] 随机取一个数。假设100元红包发10个人,那么合理的做法应该是每个人领到10元的概率相同。

这样推导下去,每个人领到相同金额的概率应该就是相同的了。

第一次生成随机数: k1=(0,sum/n2) (左开右开区间内的随机数)

第二次生成随机数:k2 = (0,(sum-k1)/(n-1)2)

第三次生成随机数:k3 = (0,(sum-k1-k2)/(n-2)2)

第N次生成随机数:kn = sum-k1--kn-1

这个算法可以把总金额想象成一条线段,每个人都有机会切一刀,前面的人切剩下的后面的人再接着切,这样越是前面的人截取的长度(理解成领取到的红包金额)越大的概率就越大。

思路是这样的,用 取随机数()这个函数,你可以把钱单位换算成分,10元就是1000分,最后完了你可以再换算回来。

先:置随机数种子 () ‘先置随机种子,不然每次出来的结果可能一样!

第一次:取随机数 (1, 991) ‘因为还有9次,也就是第一次最多只能取991分

第二次就是将第一次剩余钱再随机,以后以此类推,这里边要注意一下判断,每次剩余的钱必须大余或等于剩下的次数

祝好运!

以上就是关于微信红包的随机算法是怎样实现的全部的内容,包括:微信红包的随机算法是怎样实现的、抢红包算法(随机数)、易语言随机数像红包一样,发个10块10份每份都是随机的,最后随机的总和等于10块!求思路!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10164041.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存