php红包算法函数[优化]
2024-08-28 22:35:32
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);
}
?>
最新文章
- Atitit 判断判断一张图片是否包含另一张小图片
- Jetty多Connector
- ccc 调试方法
- JS打字效果的动态菜单代码分享
- Flexbox完整指南- A Complete Guide to Flexbox
- java调优随记-堆和栈
- C语言-字符编码转换:UTF与GB2312
- CG-CTF simple-machine
- UVA11922 Permutation Transformer
- log4j实现日志的输出
- IDEA添加项目为library
- Nginx学习安装配置和Ftp配置安装
- 根据twitter的snowflake算法生成唯一ID
- require/load/include/extend的区别
- Sql Server数据库备份脚本以及如何在阿里云云数据库RDS还原数据库(代码源自阿里云)
- try except 异常处理
- 自定义控件---loadingView
- Python抓取远程文件获取真实文件名
- 修改Android模拟器的system分区,以及加入SuperSU
- Linux CentOS 7 安装字体库 &; 中文字体
热门文章
- POJ 3177——Redundant Paths——————【加边形成边双连通图】
- 纯CSS控制背景图片100%自适应填充布局
- Aspose.Words导出图片 表格 Interop.Word
- MSSql关闭自增列
- Spring课程 Spring入门篇 2-1 IOC和bean容器
- <;Android 基础(十五)>; Alert Dialog
- 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
- 使用COCOStudio中各种资源
- [原创]Centos7 安装配置ASP.NET Core+Nginx+Supervisor
- C#多线程Thread