可以自定义红包总金额,总包数,每包最小金额

<?php/*** 红包类*/class RedPacket{// 要发的红包总金额private $total = 0.01;// 总共要发红包总包数private $bags = 1;// 每包最小红包金额数private $min = 0.01;function __construct($total, $bags, $min){$this->total = $total;$this->bags  = $bags;$this->min   = $min;}/*** [发红包]* @return [array] [红包的每包金额数组]*/public function give_red_packets(){$redpacket_arr = [];//根据最小值不一样,需要转化switch (true) {case $this->min >= 1:$right_value = 1;break;case $this->min >= 0.1:$right_value = 10;break;case $this->min >= 0.01:$right_value = 100;break;}for($i = 1;$i < $this->bags;$i++){//设置循环,边界值是红包数-1//保证后面至少有($bags - $i)个最小金额可以发,通过公式模拟数学中的离散模型$safe = bcdiv(($this->total - ($this->bags - $i) * $this->min), ($this->bags - $i), 2);//根据离散数学模型得到每个红包的金额$rand = rand(0, bcmul($safe - $this->min, $right_value, 2)) + $this->min;//如果大于倍值,需要转化,反之,不需要。为了防止有的红包金额小于设定的最小金额if ($rand >= ($this->min * $right_value)) {$money = bcdiv($rand, $right_value, 2);} else {$money = strval($rand);}$this->total -= $money; //替换$total的值$redpacket_arr[] = number_format($money, 2);//把每个红包金额数格式化,存起来}$left = number_format($this->total, 2);//调用number_format()方法,对数字$total格式化$redpacket_arr[] = $left;//输出最后一个红包return $redpacket_arr;}}//发红包$redpacket = new RedPacket(881.88, 20, 1.5);$redpacket_arr = $redpacket->give_red_packets();echo '<pre>';print_r($redpacket_arr);print_r('红包总金额:' . array_sum($redpacket_arr));echo '</pre>';

881.88元,20包,每包至少1.5元

效果截图:

100元,33包,每包至少0.01元

离散数学模拟微信红包算法升级版相关推荐

  1. matlab 发微信,微信红包算法MATLAB实现

    上午看到基友分享的微信红包算法的文章,代码很短,春节期间红包太火了,看完就也想实现下玩玩,原代码是JAVA的,没接触过JAVA,所以看懂后改成了MATLAB的.原文链接:微信红包随机算法初探 , 作者 ...

  2. matlab程序模拟微信抢红包,微信红包算法MATLAB实现

    上午看到基友分享的微信红包算法的文章,代码很短,春节期间红包太火了,看完就也想实现下玩玩,原代码是JAVA的,没接触过JAVA,所以看懂后改成了MATLAB的.原文链接:微信红包随机算法初探 , 作者 ...

  3. 一不小心错过的几个亿还可以再回来!解密微信红包算法

    前言 ◆ ◆ ◆ ◆ 还记得2017年,微信红包收发总量达到460亿个,2019年,除夕到初五,8.23亿人收发微信红包.一觉醒来,微信群里各种红包,顿时觉得错过了几个亿,破解了红包的规律,是不是就可 ...

  4. 微信红包算法代码实现

    微信红包算法思考学习研究 闲来无事,研究下微信的红包算法,也思考下可以实现的其他算法,略作记录. 微信红包的随机算法不是在发红包时就算好的,而是用户在领取红包时实时计算出客户领取红包金额,因此红包的算 ...

  5. js 实现微信红包算法

    微信红包算法 5块钱生成五个红包,要注意的有 1.生成5个随机数 2.5个随机数加起来必须等于5 3.红包要设置最小值 如最小值不能小于0.01 4.红包要设置最大值,如果第一个红包为5,剩下四个红包 ...

  6. 说说微信红包算法,为什么你总是抢的那么少?

    红包业务流程 拆包算法 1.无脑随机发  每个人抢红包,红包金额 = [0.01,红包剩余金额):最后一个人就不用随机了,无论剩下多少都是最后一个人的了. 2.线性切割法 把总金额数值,想象成一条绳子 ...

  7. js微信抢红包脚本代码_微信红包算法(js)

    下面实现一个微信红包的抽奖模拟,听说是微信的官方算法,我不确定,先看下实现思路(源码在文章最后): 设置最小金额为0.01,最大金额为剩余金额/剩余红包数量的2倍 在最大最小金额之间取一个随机数作为红 ...

  8. 微信抢红包代码 python_用 Python 实现一个简单的微信红包算法

    今年过年各位一定在微信里抢了不少红包.那么当别人是手气王而你只抢到1分钱的时候,你有没有想过,如果你来实现红包的分配算法,会怎么写? 这里我给一个简单的实现方案. 基本思路就是,有多少个红包,就循环多 ...

  9. Python微信红包算法

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

最新文章

  1. 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind
  2. JFrame 简单使用
  3. 扩展32KRAM的STC8H8K信号采集版
  4. php dubbo 接口测试工具,dubbo服务自动化测试搭建
  5. 系统间通信4:基本IO通信模型
  6. 如何捕获 EF 生成的 SQL 脚本?
  7. html网页加入一个按钮,在html网页设计中,一个“登录”按钮怎么编写代码?
  8. 微软通信winusb —— 不再为你的usb设备编写驱动
  9. Leetcode之二叉树展开为链表(深搜)
  10. MyCAT实现MySQL的读写分离
  11. 考研数学 曲线曲面积分
  12. Python实战题 · 计算圆面积
  13. 第十四周 项目2-用文件保存的学生名单
  14. SDKMAN!使用指南
  15. 中文版Echarts世界地图
  16. 【云周刊】第130期:阿里研究院发布新网商五大预测,2020年将诞生第一个机器人网商?...
  17. Oracle11g卸载完服务还有,Oracle11g服务器与客户端卸载、安装
  18. 电子采购:制造业的“救星”
  19. python ctm 关联主题模型_面向特定划分的主题模型的设计与实现
  20. 不用找代理,教你如何在新系统自己申请软著(软件著作权)

热门文章

  1. 虚拟化介绍及Docker与传统虚拟化有什么区别
  2. 求助计算机程序员,程序员用代码求救:几近绝望时竟是老本行救了他
  3. 素数问题与质因子分解
  4. 色即是空之临时演员[韩国]
  5. 微信公众号(服务号)接入开发之微信授权登陆
  6. 现金的消亡与货币的未来之战 |链捕手
  7. windows分类及安装
  8. nn.Squential与nn.ModuleList区别
  9. 无法同步因计算机未授权,iTunes无法授权和同步解决办法教程
  10. 计算机休眠快还是关机快,电脑关机、休眠、睡眠、快速启动模式的区别介绍