算法(转载)"/>
砍价两种种算法(转载)
砍价破浪算法(第一种)
/*** 波浪递减砍价算法* @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
更多推荐
砍价两种种算法(转载)
发布评论