微信红包生成算法 (解)

/**
* 微信红包生成算法
*
* @param int $total 红包金额
* @param int $num 拆分数量
* @param int $min 拆分的红包最小金额数目
*/
function set_packet($total, $num, $min = 0.01)
{
for ($i = 1; $i < $num; $i++)
{
//随机安全上限
$safe_total = ($total-($num-$i)*$min)/($num-$i);
//红包金额
$money = mt_rand($min*100, $safe_total * 100)/100;
//余额
$total = bcsub($total, $money, 2);

echo ‘第‘.$i.‘个红包:‘.$money.‘ 元,余额:‘.$total.‘元<br/>‘;
}
echo ‘第‘.$num.‘个红包:‘.$total.‘ 元,余额:0 元‘;
}
set_packet(10,10);

前段时间看到一个方法, 是算红包随机生成金额

$total 为用户输入的总金额...

$num 为分发总个数...

$min 为最少金额, 一般都是 1 分钱的,,,别问我为什么, 因为我经常抢到(-^-)

$safe_total = ($total-($num-$i)*$min)/($num-$i);//这里算出剩下每个红包最安全的金额

$money = mt_rand($min*100, $safe_total * 100)/100;//在最安全的数值中用mt_rand 取随机数  .. mt_rand 比rand 产生随机数值的平均数值快四倍

$total = bcsub($total, $money, 2);//相减函数, 取余后2位, 计算剩下余额

时间: 2024-10-19 22:15:28

微信红包生成算法 (解)的相关文章

PHP用抛物线的模型实现微信红包生成算法的程序源码

<?php /* *Author:Kermit *Time:2015-8-26 *Note:红包生成随机算法 */ header("Content-type:text/html;charset=utf-8"); date_default_timezone_set('PRC'); #红包生成的算法程序 class reward { public $rewardMoney; #红包金额.单位元 public $rewardNum; #红包数量 public $scatter; #分散

微信红包随机算法

最近看了一篇文章,讲微信红包随机算法的.感觉很不错,所以自己实现了下,并进行了简单测试. 算法 算法很简单,不是提前算好,而是抢红包时计算: 红包里的金额怎么算?为什么出现各个红包金额相差很大?答:随机,额度在0.01和剩余平均值*2之间. 实现 实现上述算法的逻辑主要是: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_red

【转】微信红包随机算法初探

最近看了一篇文章,讲微信红包随机算法的.感觉很不错,所以自己实现了下,并进行了简单测试. 算法 算法很简单,不是提前算好,而是抢红包时计算: 红包里的金额怎么算?为什么出现各个红包金额相差很大?答:随机,额度在0.01和剩余平均值*2之间. 实现 实现上述算法的逻辑主要是: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_red

PHP红包生成算法

一.适用场景 红包总金额X,分配成Y个红包,每个红包随机金额. 二.生成算法 /** * 红包生成算法 * @param $money 总金额 * @param $number 红包数量 * @param $ratio 浮动系数 */ function hongbao($money,$number,$ratio = 0.5){ $res = array(); //结果数组 $min = ($money / $number) * (1 - $ratio); //最小值 $max = ($money

随机红包生成算法-python实现

抢红包那么开心,那你知道红包随机算法是怎么样的吗? 我模拟写了一个定额随机红包生成算法,如下. 输入: 红包总额,total 份数,num 调控参数(调控红包最平均差,默认为2) 约束: 每份最少有1分钱,即0.01 份数需为正整数 红包总额 <= 份数×0.01 输出 随机红包序列,序列长度等于红包份数 运气王,即红包数额最大的一份 # -*- coding: cp936 -*- # 思路:先随机出来m个数,然后平均分成m个数字只和的份数,然后将钱平均分给m个人# import random

java实现微信红包分配算法

红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然为了确保所有人至少有1分钱拿,不能前几个人就把钱拿光了,因此需要有一个判断算法.举个例子,如果每个人都拿了自己的最大值: package 红包分配; public class test { public static void main(String[] args){ float num=10,N=

微信红包的算法实现

1.每个人都要能够领取到红包: 2.每个人领取到的红包金额总和=总金额: 3.每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味: 4.算法一定要简单,不然对不起腾讯这个招牌: header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元 for ($i=1;$i<$num;$

微信红包随机算法初探

http://coderroc.com/article/%E6%95%B0%E5%AD%A6%E5%92%8C%E7%AE%97%E6%B3%95/%E5%BE%AE%E4%BF%A1%E7%BA%A2%E5%8C%85%E9%9A%8F%E6%9C%BA%E7%AE%97%E6%B3%95%E5%88%9D%E6%8E%A2.html https://www.zybuluo.com/yulin718/note/93148 http://www.jianshu.com/p/026ceece4d8

PHP微信红包的算法实现探讨

header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元 for ($i=1;$i<$num;$i++) { $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 $money=mt_rand($min*100,$safe_to