随机红包算法java代码 随机红包的算法( 八 )


微信红包随机分发算法c++模拟:
基本思路:每次抢到一个红包金额等于:红包剩余金额/红包剩余个数*2*随机数(0-1的double型),如果计算的结果小于等于0.01,则取0.01值
主要代码:
double packages[50000];
double Luckiest_money=0;
void getPackage(int remainSize,double remainMoney){
srand((unsigned)time(NULL));
for(int i=0;i
我也来谈谈类似微信红包算法实现最近在做一个类似微信红包的 拼手气红包的算法实现 。
需求:
客户抛出一个想法 :他想在他的APP中加入类似微信红包功能 。
1.要求每个人都能领取红包(不超过限定人数)
2.所有领取到红包的人加起来的金额一定要等于红包的总金额
3.每个人领取到的红包都是随机的 。
4.红包数量最多为100个 。最少为2个 。(这是客户的微调 希望最少2个包才能发起)
5.最低红包金额为0.01 。
算法思想:
假设红包金额为100元随机红包算法java代码,发放n个红包随机红包算法java代码,用户为y,剩余红包数量为x,剩余红包总金额为g
当y=1时(第1个用户)
n1红包=100随机数范围
g=100-n1
x=n-1
当y=2时(第2个用户)
n2红包=(g)随机范围
x=x-1
g=g-n2
当y=3时(第3个用户)
n3红包=(g)随机范围
x=x-1
g=g-n3
.......
当y=x时(最后一个红包)
最后一个红包金额=g
抢红包算法(随机数)红包剩余金额为 M
红包剩余数量为 N
这种算法就是每次都在区间[0,M/N×2] 随机取一个数 。假设100元红包发10个人 , 那么合理的做法应该是每个人领到10元的概率相同 。
这样推导下去,每个人领到相同金额的概率应该就是相同的了 。
第一次生成随机数: k1=(0,sum/n*2)(左开右开区间内的随机数)
第二次生成随机数:k2 =(0,(sum-k1)/(n-1)*2)
第三次生成随机数:k3 =(0,(sum-k1-k2)/(n-2)*2)
第N次生成随机数:kn =sum-k1-...-kn-1
这个算法可以把总金额想象成一条线段,每个人都有机会切一刀 , 前面的人切剩下的后面的人再接着切,这样越是前面的人截取的长度(理解成领取到的红包金额)越大的概率就越大 。
关于随机红包算法java代码和随机红包的算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读