$amount = 1; // 红包总金额

$packageCount = 30; // 红包总个数

$randomFlag = true; // 金额是否随机

$grantedAmount = 0; // 已领取的金额

$averageAmount = (float)bcdiv($amount, $packageCount, 2);

if ($averageAmount < 0.01) {

exit("红包个数不能超过 " . $amount / 0.01 . " 个。\n");

}

echo "================== 发包开始,总共 {$amount} 个红包,发给 {$packageCount} 个人。 ==================\n";

for ($i = 1; $i <= $packageCount; $i++) {

if ($randomFlag) { // 随机分

$leftAmount = $amount - $grantedAmount;

$leftPackage = $packageCount - $i + 1;

$averageAmount = (float)bcdiv($leftAmount, $leftPackage, 2);

$random = (float)bcdiv(mt_rand(0, ($averageAmount * 100 - 1)), 100, 2); // 边界

$changeFunction = mt_rand(0, 1) ? 'bcadd' : 'bcsub';

$shouldGetAmount = $i == $packageCount ? bcsub($amount, $grantedAmount, 2) : $changeFunction($averageAmount, $random, 2);

} else { // 平均分

$shouldGetAmount = $i == $packageCount ? bcsub($amount, $grantedAmount, 2) : $averageAmount;

}

$grantedAmount = bcadd($grantedAmount, $shouldGetAmount, 2);

echo "你是第 {$i} 个领取红包的人,领到 {$shouldGetAmount} 个红包。【当前共发了 {$grantedAmount} 个红包】\n";

}

echo "================== 发包结束,总共发了 {$grantedAmount} 个红包。 ==================\n";

echo "end。 \n";

运行结果

================== 发包开始,总共 1 个红包,发给 30 个人。 ==================

你是第 1 个领取红包的人,领到 0.03 个红包。【当前共发了 0.03 个红包】

你是第 2 个领取红包的人,领到 0.03 个红包。【当前共发了 0.06 个红包】

你是第 3 个领取红包的人,领到 0.01 个红包。【当前共发了 0.07 个红包】

你是第 4 个领取红包的人,领到 0.02 个红包。【当前共发了 0.09 个红包】

你是第 5 个领取红包的人,领到 0.03 个红包。【当前共发了 0.12 个红包】

你是第 6 个领取红包的人,领到 0.03 个红包。【当前共发了 0.15 个红包】

你是第 7 个领取红包的人,领到 0.05 个红包。【当前共发了 0.20 个红包】

你是第 8 个领取红包的人,领到 0.03 个红包。【当前共发了 0.23 个红包】

你是第 9 个领取红包的人,领到 0.05 个红包。【当前共发了 0.28 个红包】

你是第 10 个领取红包的人,领到 0.05 个红包。【当前共发了 0.33 个红包】

你是第 11 个领取红包的人,领到 0.03 个红包。【当前共发了 0.36 个红包】

你是第 12 个领取红包的人,领到 0.01 个红包。【当前共发了 0.37 个红包】

你是第 13 个领取红包的人,领到 0.03 个红包。【当前共发了 0.40 个红包】

你是第 14 个领取红包的人,领到 0.01 个红包。【当前共发了 0.41 个红包】

你是第 15 个领取红包的人,领到 0.02 个红包。【当前共发了 0.43 个红包】

你是第 16 个领取红包的人,领到 0.05 个红包。【当前共发了 0.48 个红包】

你是第 17 个领取红包的人,领到 0.05 个红包。【当前共发了 0.53 个红包】

你是第 18 个领取红包的人,领到 0.03 个红包。【当前共发了 0.56 个红包】

你是第 19 个领取红包的人,领到 0.05 个红包。【当前共发了 0.61 个红包】

你是第 20 个领取红包的人,领到 0.03 个红包。【当前共发了 0.64 个红包】

你是第 21 个领取红包的人,领到 0.01 个红包。【当前共发了 0.65 个红包】

你是第 22 个领取红包的人,领到 0.01 个红包。【当前共发了 0.66 个红包】

你是第 23 个领取红包的人,领到 0.03 个红包。【当前共发了 0.69 个红包】

你是第 24 个领取红包的人,领到 0.02 个红包。【当前共发了 0.71 个红包】

你是第 25 个领取红包的人,领到 0.01 个红包。【当前共发了 0.72 个红包】

你是第 26 个领取红包的人,领到 0.09 个红包。【当前共发了 0.81 个红包】

你是第 27 个领取红包的人,领到 0.05 个红包。【当前共发了 0.86 个红包】

你是第 28 个领取红包的人,领到 0.04 个红包。【当前共发了 0.90 个红包】

你是第 29 个领取红包的人,领到 0.09 个红包。【当前共发了 0.99 个红包】

你是第 30 个领取红包的人,领到 0.01 个红包。【当前共发了 1.00 个红包】

================== 发包结束,总共发了 1.00 个红包。 ==================

end。

php定时红包,PHP随机红包和等额红包的简单实现相关推荐

  1. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

  2. 红包分配:指定金额指定上下限后随机分发成若干个红包,随机抽

    公司最近策划一个红包活动,指定金额指定上下限后随机分发成若干个红包,以抽奖机制抽给员工.拿到这活,首先想到的当然是度娘哈,偷师学艺之后,初步进行代码实现,下面讲述下原理. 主要分两步:红包随机分割和随 ...

  3. 微信红包的随机算法是怎样实现的?

    导语:今天看到有人问:关于微信红包的随机算法!就查阅资料看了一下"微信红包的架构设计",自己设计的"公平"的随机算法. 实现的代码 public static ...

  4. 微信红包的随机算法是怎样实现的

    2019独角兽企业重金招聘Python工程师标准>>> 微信红包的随机算法是怎样实现的? RT.我考虑了一个简单的算法: 比如100元,由10个人分,那么平均一个人是10元钱.然后付 ...

  5. 上线红包功能,真的真的没有你想的这么简单~

    ---- / BEGIN / ---- 年前玲子负责了自己产品的红包版本功能的大迭代,感触和收获颇深,觉得有必要做一次产品复盘的自我思考. 随着移动支付的发展,微信红包彻底改变了我们的红包文化,互联网 ...

  6. php 红包算法,PHP语言:实现微信红包拆分算法

    本文主要向大家介绍了PHP语言:实现微信红包拆分算法,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. · 修复最后一个红包输出未保留2位数 · 修复领取的红包金额低于最小红包限制 * 红 ...

  7. 微信红包数字变化动态图片_微信红包数字动图下载_微信动态图片红包图下载_游戏吧...

    微信红包动图数字是一款有趣的实用工具,在这里用户能够通过软件进行简单的编辑来让自己发出的红包会就这样动起来,还等什么,感兴趣的话就快来下载体验吧! 下载使用教程 红包的使用教程在下载使用教程的下方,也 ...

  8. 最全微信红包分配算法,不只是二倍均值那么简单

    最全微信红包分配算法!不只是二倍均值那么简单! 一.序言 本文要解决什么问题? 抢红包的顺序对红包收益有无影响? 抢红包的顺序对当运气王的概率有无影响? 红包接龙游戏每次都是先抢好还是后抢好? 红包接 ...

  9. 云闪付,每天签到,转账领红包,新用户领取8-2018元红包

    云闪付:中国银联移动支付新品牌 云闪付的新年活动,新老用户都可以参与,每天签到,转账一笔各获得一个随机红包,最高2018元,每天都可以领,红包在云闪付充话费,水电煤缴费可抵现,也可以在1号店.国美等购 ...

  10. 微信红包c语言程序,C语言 微信红包

    满意答案 #include #include #include #define MAX_TOTAL_MONEY 200 //红包的最大金额 #define MIN_PER_PLAYER  1   // ...

最新文章

  1. Java-Java I/O 字节流之BufferedReader/BufferedWriter
  2. form怎么加ion_企业微信裂变该怎么做?一份裂变1000+社群裂变方案的底层逻辑
  3. POJ2826 An Easy Problem?!
  4. set python_set在python里的含义和用法
  5. 计算机专业网络实训室,计算机专业实训室建设方案.doc
  6. 计算机网络练习题-4
  7. 求一元硬币兑换成1分、2分、5分的硬币的兑换方案
  8. php 睡眠,win10系统睡眠和休眠有什么区别
  9. iOS MOV转MP4
  10. 使用Openxal框架开发加速器模型相关的java应用程序
  11. 杰力科创七彩灯雾化器芯片--DLT8P60SC
  12. 计算机专业专科可以进的国企,专科毕业想要进国企?这四大专业是首选,成功率高达50%...
  13. 倍福--运动中修改速度
  14. 及时复盘的好处_复盘是什么意思,有什么意义
  15. 黄褐斑的食疗用什么,姬净美效果不错
  16. 「云」上风景虽好,但不要盲目跟风
  17. 仿牌独立站如何通过PayPal.Me亲友付进行收款
  18. python销毁线程_Python 中的线程
  19. 9. Qt5文件及磁盘处理
  20. 超级好用的开发工具,程序员实用工具整理

热门文章

  1. 魔法函数%matplotlib 解决matplotlib画图在Jupter/IPython中不显示
  2. lede 命令 启用 ssh_PHP imap_open函数任意命令执行漏洞
  3. 讲几种Python包的安装方式
  4. SAP UI5 应用的 OData 元数据请求响应的解析原理分析
  5. 使用 ABAP 控制 Android 原生应用
  6. 如何启用 express debug 模式
  7. SAP UI5里input field live search的实现例子
  8. SAP Analytics Cloud Smart Discovery不支持具有exception aggregation设置的模型
  9. 如何使用SAP Cloud for Customer里的Data Source
  10. SAP CRM WebClient UI检查当前页面是否支持Delta handling的代码