php砍价算法、随机红包金额算法
/**
* 砍价算法-生成砍价金额
*
* @param int $people 砍价人数或次数
* @param int $amount 砍价总额 单位元
* @param int $min 最低砍价金额 不得低于0
* @param int $max 最高砍价金额 砍价次数 * 最高砍价金额不得小于砍价总额
* @param int $level 层级 防止递归超出限制
*
* @return array
*/
function genRandomAmount($people = 0, $totalAmount = 0, $min = 0, $max = 0, $level = 1)
{
// 防止递归超出限制报异常,提前退出
if ($level == 200) {
return [];
} $arr = []; // 数据错误直接返回
if (empty($people) || empty($totalAmount)) {
return [];
} // 转换成分便于计算
$tmpTotal = $totalAmount * 100;
$tmpMin = $min * 100;
$tmpMax = $max * 100; // 计算n-1次的随机金额,如果不减1,则会出现多减一次随机金额的问题,应该是最后的金额直接赋值
for ($i = 0; $i < $people - 1; $i++) {
$arr[$i] = mt_rand($tmpMin, $tmpMax);
$tmpTotal = $tmpTotal - $arr[$i];
} // 最后的价格直接使用最后剩余的价格
$arr[$people - 1] = $tmpTotal; // 最后一次价格小于最小金额或者大于最大金额都不对,继续递归重新计算
if ($tmpTotal < $tmpMin || $tmpTotal > $tmpMax) {
return genRandomAmount($people, $totalAmount, $min, $max, $level + 1);
} // 返回单位元的数据
return array_map(function ($value) {
return $value / 100;
}, $arr);
} /**
* 砍价算法-获取砍价金额
*
* @param int $people 砍价人数或次数
* @param int $amount 砍价总额
* @param int $min 最低砍价金额 不得低于0
* @param int $max 最高砍价金额 砍价次数 * 最高砍价金额不得小于砍价总额
*
* @return array
*/
function getRandomAmount($people = 0, $totalAmount = 0, $min = 0, $max = 0)
{
// 数据错误直接返回
if (empty($people) || empty($totalAmount)) {
return [];
} if ($people * $max <= $totalAmount) {
return false;
} $arr = genRandomAmount($people, $totalAmount, $min, $max); // 有几率会因为递归调用超出限制而返回空数组,这里继续重新生成,直到金额正确
while (empty($arr)) {
$arr = genRandomAmount($people, $totalAmount, $min, $max);
} return $arr;
}
php砍价算法、随机红包金额算法的更多相关文章
- PHP实现微信随机红包算法和微信红包的架构设计简介
微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...
- 重启随机游走算法(RWR:Random Walk with Restart)
1 pagerank算法的基本原理 Pagerank算法是Google的网页排名算法,由拉里佩奇发明.其基本思想是民主表决.在互联网上,如果一个网页被很多其他网页所链接,说明它受到普遍的承认和信赖,那 ...
- java使用BigDecimal 实现随机金额红包拆分算法
原创代码,引用注明出处:https://www.cnblogs.com/guangxiang/p/12218714.html @Servicepublic class SplitRedPacketsS ...
- php 随机红包算法
<?php /** * 红包分配算法 * * example * $coupon = new Coupon(200, 5); * $res = $coupon->handle(); * p ...
- PHP随机红包算法
2017年1月14日 14:19:14 星期六 一, 整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记 ...
- php 固定红包 + 随机红包算法
<?php /** * 随机红包+固定红包算法[策略模式] * copyright (c) 2016 http://blog.csdn.net/CleverCode */ //配置传输数据DTO ...
- java实现微信红包分配算法
红包算法分析 有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然 ...
- PHP用抛物线的模型实现微信红包生成算法的程序源码
<?php /* *Author:Kermit *Time:2015-8-26 *Note:红包生成随机算法 */ header("Content-type:text/html;cha ...
- PHP微信红包生成算法的程序源码(用抛物线的模型实现)
代码如下: <?php /* * 红包生成随机算法 */ header("Content-type:text/html;charset=utf-8"); date_defau ...
随机推荐
- Android Library 发布开源库 JCenter & JitPack 攻略
对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...
- win10 手动安装mysql-8.0.11-winx64.zip
0.彻底删除win10上安装的mysql(转载 : https://www.cnblogs.com/jpfss/p/6652701.html) 1.去官网下载mysql-8.0.11-winx64.z ...
- JS对象与原型
一. JS的对象 1.1 创建对象的几种方式 1.1.1 通过字面量创建对象 在js中,一对{} 其实就是一个对象 var person = { name: "tom", age: ...
- SSM整合案例:图书管理系统
目录 SSM整合案例:图书管理系统 1.搭建数据库环境 2.基本环境搭建 2.1.新建一个Maven项目,起名为:ssmbuild,添加web的支持 2.2.导入pom的相关依赖 2.3.Maven静 ...
- DHCP报文(1)
DHCP报文 1.地址申请类型(4步工作原理,常考) (1)此题是典型的四步工作原理,在其配置过程中由于没有分配IP地址,用的是广播形式,所以其4中报文类型的目的IP地址均为255.255.255.2 ...
- 201771010113-李婷华 实验一 软件工程准备-<软件工程的相关了解>
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 这个作业要求链接 https://www.cnblogs.com/nwnu- ...
- D365,实现批量上传和下载文件的工具
这里演示下批量上传文件到D365的小程序工具,下载功能也是一样的思路跟逻辑. 通过文件名的前缀跟各个主档表的主键进行绑定来决定将附件挂在哪里. 1.上传界面. 2.查看附件上传结果.
- [zoj 3416/hdu 3709]数位DP
题意:求从区间[L, R]内有多少个数是平衡数,平衡数是指以10进制的某一位为中心轴,左右两边的每一位到中心轴的距离乘上数位上的值的和相等.0<=L<=R<=1e18 思路:由于任何 ...
- 基于 abp vNext 和 .NET Core 开发博客项目
项目介绍 此个人博客项目底层基于 ABP Framework (不完全依赖)搭建项目 和免费开源跨平台的 .NET Core 3.1 开发,可作为 .NET Core 入门项目进行学习,支持各种主流数 ...
- win10安装nodejs,修改全局依赖位置和环境变量配置
为什么要修改nodejs全局依赖位置? nodejs全局依赖安装默认位置在C盘,导致C盘文件太大,影响电脑运行速度. 步骤: 安装nodejs(在node官网下载并安装) 查看nodejs版本(在命令 ...