砍价两种种算法(转载)

编程入门 行业动态 更新时间:2024-10-26 16:28:58

砍价两种种<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法(转载)"/>

砍价两种种算法(转载)

砍价破浪算法(第一种)

/*** 波浪递减砍价算法* @param $count 拆分数量 * @param $price 拆分总价*/
function new_split_red_packet($count = 20, $price = 5)
{//已砍价格数组$aleadyList = [];//已砍钱的总和$aleadyCut = 0;for ($i = 0; $i < $count; $i++) {//此次砍价的最低钱数(总价-已砍总价/总次数-已砍次数)(相当于是向上随机)(转换为单位分)$min = ($price - $aleadyCut) / ($count - count($aleadyList));//控制波浪幅度 1-2之间$max = $min * 1.5;//随机生成砍价金额$cutPrice = mt_rand($min * 100, $max * 100) / 100;//如果是最后一个直接返回金额if ($i == $count - 1) {$cutPrice = round(($price * 100 - $aleadyCut * 100) / 100, 2);}//增加已砍总额$aleadyCut = ($aleadyCut * 100 + $cutPrice * 100) / 100;//砍价额度存入数组$aleadyList[] = $cutPrice;}return $aleadyList;
}注意事项:如果有php有安装BC库(高精确度函数库)可以使用BC库提供的函数进行运算

砍价算法(第二种)

/*** 砍价算法-生成砍价金额** @author 宋健安<506780989@qq.com>** @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;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);
}/*** 砍价算法-获取砍价金额** @author 宋健安<506780989@qq.com>** @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 ($people * $max <= $totalAmount) {return false;}$arr = genRandomAmount($people, $totalAmount, $min, $max);// 有几率会因为递归调用超出限制而返回空数组,这里继续重新生成,直到金额正确while (empty($arr)) {$arr = genRandomAmount($people, $totalAmount, $min, $max);}return $arr;
}

转载:
.html

更多推荐

砍价两种种算法(转载)

本文发布于:2023-06-28 23:33:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/935673.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法   砍价

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!