
我考虑了一个简单的算法:
比如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块!求思路!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)