简单发红包算法。
来源:互联网 发布:用xcode编写c语言教程 编辑:程序博客网 时间:2024/06/08 10:23
随机分配X个红包,初始版,暂留在这里笔记。。年后再处理,
实际应用中需要结合redis等考虑并发的东西。
<?php/*** */class readPack { //总金额 public $sumMoney = 0; //要发的红包个数 public $nums = 0; //单个最小获得红包 public $min = 0; //红包数组 public $packArr = []; //已发放的数量 public $hasAllot = 0; //已发送的个数 public $hasAllotNums = 0; function __construct($sumMoney, $nums, $min = 0.01){ $this->sumMoney = $sumMoney; $this->nums = $nums; $this->min = $min; } //获得单个红包 private function _generateSignPack(){ //剩余未分配的金额 $leftMoney = $this->sumMoney - $this->hasAllot; //剩余还要发的红包个数 $leftNums = $this->nums - $this->hasAllotNums; //按最小金额发需要的约包金额 $mustRetain = $leftNums * $this->min; //最后一个直接得剩余红包 if( $leftNums == 1){ $pack = $leftMoney; } else { //如果只能发保底了,就所有人发保底金额 if( $leftMoney <= $mustRetain){ $pack = $this->min; } else { //余下的平均数 $avgMoney = $leftMoney/($leftNums); $signMax = $avgMoney * 2; $pack = $this->_getRandom($this->min, $signMax); //有可能这次生成的红包,后面的就不够保底分了。 if( $leftMoney - $mustRetain < $pack ){ $pack = $this->min; } } } $this->hasAllot += sprintf('%.2f', $pack); $this->packArr[] = sprintf('%.2f', $pack); $this->hasAllotNums++; } //分红包 function generatePacks(){ for($i=0; $i<$this->nums; $i++){ $this->_generateSignPack(); } } //生成指定大小的随机数 private function _getRandom($min = 0.01, $max = 1) { return sprintf('%.2f', $min + mt_rand() / mt_getrandmax() * ($max - $min) ); }}$redPack = new readPack(200000000, 1000000);$redPack->generatePacks();//print_r( $redPack->packArr );echo "红包总金额:{$redPack->sumMoney}\n";echo "生成红包总额:{$redPack->hasAllot}\n";echo "红包总个数:{$redPack->nums}\n";echo "单个最大红包:".max($redPack->packArr)."\n";echo "单个最小红包:".min($redPack->packArr)."\n";
0 0
- 简单发红包算法。
- 发红包算法简单实现
- 微信发红包算法
- 自己写的发红包的算法
- lua洗牌和发红包算法
- 随机发红包算法(java)
- 算法小游戏---支付宝之趣味发红包
- 用C语言实现发红包的软件算法
- 发红包android
- AOJ-722 发红包
- 发红包案例
- 发红包系统
- php随机发红包
- php 实线发红包
- 夹克爷发红包
- 回家过年发红包了!
- 乾隆发红包的故事
- 微信红包发红包
- • Spring Boot 初 识 篇
- 我做站的时候造成5错误常见原因给大家说下
- Java API 生产和消费Kafka消息
- 基于Spark的分布式深度学习框架BigDL开源了!
- exp/imp as sysdba
- 简单发红包算法。
- socket编程
- Codeforces Round #390 (Div. 2)E Dasha and cyclic table
- 大咖,我能转行做UX设计师吗?
- Splinter 查找元素
- 浅谈Linux系统运维工程师必备技能
- Java HashMap中链表结构是如何产生的
- react-native ios端真机调试 打包与发布
- IE9以下和chrome兼容性的问题