简单的红包分配算法
2016-01-12 18:14
260 查看
今天在群里听朋友说公司要他写一个红包分配算法,闲来无事,就临时帮他写了一下。 废话不多说,直接上代码:
$num = 3; //红包个数
$total = 10; //红包总金额
$scale = array(); //比例数组
for($i=0; $i<$num; $i++){
$scale[] = rand(1,100);
}
$count = array_sum($scale); //总比例
foreach($scale as $key=>$val){
$total * ($val/count); //循环依次得到每个人领的红包,需要做下小数点处理。
}
实现思路大概是这样的 :
如果将10块钱发3个红包 , 那就产生3个1-100 之间的随机数。 比如 5 64 21 。
5分别占这3个 数总和的 5/(5+64+21) = 5/90 约等于 0.05
那就用 10块钱的红包金额 乘 0.05
就是第一个人得到的红包了
在用64/(5+64+21) = 64/90 = ...
得到第二个人得到的红包,依次类推。
这样是公平的 ,
因为产生随机数 都是从1-100
$num = 3; //红包个数
$total = 10; //红包总金额
$scale = array(); //比例数组
for($i=0; $i<$num; $i++){
$scale[] = rand(1,100);
}
$count = array_sum($scale); //总比例
foreach($scale as $key=>$val){
$total * ($val/count); //循环依次得到每个人领的红包,需要做下小数点处理。
}
实现思路大概是这样的 :
如果将10块钱发3个红包 , 那就产生3个1-100 之间的随机数。 比如 5 64 21 。
5分别占这3个 数总和的 5/(5+64+21) = 5/90 约等于 0.05
那就用 10块钱的红包金额 乘 0.05
就是第一个人得到的红包了
在用64/(5+64+21) = 64/90 = ...
得到第二个人得到的红包,依次类推。
这样是公平的 ,
因为产生随机数 都是从1-100
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析