php红包算法


<?php
header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的
$total=10000;//红包总额
$num=10;// 分成8个红包,支持8人随机领取
$min=10;//每个人最少能收到0.01元
echo '<pre>';
$redarr=array();
for ($i=1;$i<=$num;$i++)
{
$red=getredmoney($i,$total,$num,$min);
$total=$total-$red['money'];
echo '第'.$i.'个红包:'.$red['money'].' 元,余额:'.$red['total'].' 元 <br/>';
$redarr[]=$red['money'];
}
echo '总金额:'.array_sum($redarr); /**
* 获取红包
* @param $i 第几个人
* @param $total 剩余总红包金额
* @param $num 总人数
* @param $min 最小获得金额
* @param $point 保留小数位数
*/
function getredmoney($i,$total,$num=10,$min=1,$point=0){
if($i==$num){
$money=$total;
}else{
$pre=$total/($num-$i+1);
if($pre==$min){
$money=$min;
}else if($pre<$min || ($pre-$min)<1){
$safe_total=$total-($num-$i)*$min;//随机安全上限
$money=@mt_rand($min*100,$safe_total*100)/100;
}else{
$safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限
$money=@mt_rand($min*100,$safe_total*100)/100;
if($money<$min)$money=$min;
}
$money=round($money,$point);
}
$total=$total-$money;
return array('i'=>$i,'money'=>$money,'total'=>$total);
}
?>

最新文章

  1. Atitit 判断判断一张图片是否包含另一张小图片
  2. Jetty多Connector
  3. ccc 调试方法
  4. JS打字效果的动态菜单代码分享
  5. Flexbox完整指南- A Complete Guide to Flexbox
  6. java调优随记-堆和栈
  7. C语言-字符编码转换:UTF与GB2312
  8. CG-CTF simple-machine
  9. UVA11922 Permutation Transformer
  10. log4j实现日志的输出
  11. IDEA添加项目为library
  12. Nginx学习安装配置和Ftp配置安装
  13. 根据twitter的snowflake算法生成唯一ID
  14. require/load/include/extend的区别
  15. Sql Server数据库备份脚本以及如何在阿里云云数据库RDS还原数据库(代码源自阿里云)
  16. try except 异常处理
  17. 自定义控件---loadingView
  18. Python抓取远程文件获取真实文件名
  19. 修改Android模拟器的system分区,以及加入SuperSU
  20. Linux CentOS 7 安装字体库 & 中文字体

热门文章

  1. POJ 3177——Redundant Paths——————【加边形成边双连通图】
  2. 纯CSS控制背景图片100%自适应填充布局
  3. Aspose.Words导出图片 表格 Interop.Word
  4. MSSql关闭自增列
  5. Spring课程 Spring入门篇 2-1 IOC和bean容器
  6. <Android 基础(十五)> Alert Dialog
  7. 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
  8. 使用COCOStudio中各种资源
  9. [原创]Centos7 安装配置ASP.NET Core+Nginx+Supervisor
  10. C#多线程Thread