微信红包金额分配案例

<?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    /*
    微信红包的总额有100元,必须要发送给60个用户,
    每个用户领取的红包是随机的,且每个用户领取的金额不得大于2元
    **/
    public function index(){
        $total =100;//100元
        $amount = 60;//60人
        $baseCash = 0.1;//基础值
        $arr = $this->assign_money($total,$amount,$baseCash);
        dump($arr);
        dump(array_sum($arr)); //array_sum() 函数返回数组中所有值的总和
    }
    /*array_fill() 函数用给定的值填充数组,
    返回的数组有 number 个元素,值为 value。
    返回的数组使用数字索引,
    从 start 位置开始并递增。
    如果 number 为 0 或小于 0,
    就会出错。*/
    public function assign_money($total,$amount,$baseCash){
        $arr = array_fill(0,$amount,$baseCash);
        $total=floor($total - $amount*$baseCash);
        while($total>0){ //只要指定条件为真,则循环代码块
            $lucky =rand(0,$amount-1);//返回0~59之间的随机整数
            if($arr[$lucky]<2){
                $arr[$lucky]+=$baseCash;
                $total = round($total - $baseCash,1);//对浮点数进行四舍五入,保留一位小数点
            }
        }
        return $arr;
    }
}

?>
时间: 2024-08-09 16:02:35

微信红包金额分配案例的相关文章

微信红包金额分配的算法 http://timyang.net/architecture/wechat-red-packet/

虽然春节已经过去一段时间,但不少微信群里面依旧乐此不疲的在玩发红包活动,用户自发的将最初的一个春节拜年的场景功能慢慢演化成一个长尾功能. 用户在微信中抢红包时分成抢包和拆包两个操作.抢包决定红包是否还有剩余金额,但如果行动不够迅速,在拆包阶段可能红包已经被其他用户抢走的情况. 红包的金额是在什么时候算? 据某架构群腾讯财付通专家反馈,红包的金额是拆的时候实时计算,而不是预先分配,实时计算基于内存,不需要额外存储空间,并且实时计算效率也很高.每次拆红包时,系统取0.01到剩余平均值*2之间作为红包

ruby案例分析:微信红包分配

今年和去年一样,央视的春晚再次被广大网友吐槽, 即便全民呼吁"六小龄童上春晚",齐天大圣仍然没有走上央视舞台.知名时评人石述思转了这样一条微博,今年的春晚导演为了大家抢红包也是拼了,连一分钟好看的节目都没安排.目前全国人民都听牌了,单吊敬业福! 稍微吐槽一下还是回到今天的主题,今天讲一个ruby实战教程--微信红包金额分配算:知乎上的一篇文章讨论的比较深入,个人觉得下面的这个分析比较靠谱. 红包领了不少,据观察红包主要有以下几个限制条件:1.所有人都能分到红包,也就是不会出现红包数值为

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=

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

微信红包的实现

封装一个微信用包类,主要的功能有|: 红包中存有钱,多少个人分:每个分到的钱数,及获收红包的时间: 主要的功能有 打开红包:(如果打开红包的人数没有达到上限,则可以打开,并随机获得金额) 查看红包分配信息: 设置截止日期:(如果超过最大金额,则再打时提示过期) 思路:微信红包类应该具有的属性有红包金额,红包数,过期时间,领红包的人,时间等. 难点在于:将红包如何分成几份,等可能的被其他人抢到,而且不会出现为0的红包. 首先运用取随机数的类,每次取当前所剩金额的随机数,然后将这些分好的红包放到数组

微信红包随机算法

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

微信红包的架构设计简介{转}

转自https://www.zybuluo.com/yulin718/note/93148 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2

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

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

微信红包的随机算法

微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里 不过他们讨论的太过于深入,有掉坑之嫌. 我按照自己的逻辑尝试了下,这个算法需要满足以下几点要求 1.每个人都要能够领取到红包:2.每个人领取到的红包金额总和=总金额:3.每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味:4.算法一定要简单,不然对不起腾讯这个招牌: 正式编码之前,先搭建一个递进的模型来分析规律 设定总金额为10元,有N个人随机领取: N=1 则红包金额=X元