概述
# 话不多说,直接看代码.可以根据需求调整区间
/**
* @param $amount 商品总金额
* @param $ndu 需要人次
* @param $surplus_amount 剩余金额
* @param $count_joiner 参与人次
* @return array
*/
function cutAKnife($amount , $ndu , $surplus_amount , $count_joiner){
// 10个人 第五刀出现负数
// 30%人 -> 50%价格
// 30%人 -> 30%
// 40%人 -> 20%
$first_u = 0.3 ; // 第一区间人数占比
$second_u = 0.3; // 第二区间人数占比
$third_u = 0.4; // 第三区间人数占比
$first_p = 0.5; // 第一区间砍价金额占比
$second_p = 0.3; // 第一区间砍价金额占比
$third_p = 0.2; // 第一区间砍价金额占比
$sim = 0.7; // 每一刀区间最少占比
$last = false; // 是否为最后一刀
if($count_joiner == 0 ){
$x = 0.4 * $amount; // 默认第一刀砍价占比
}else {
$amount = 0.6 * $amount;
if ($count_joiner == $ndu - 1) {
// 根据设定人数,最后一位直接砍完
$x = $surplus_amount;
$last = true;
} else {
if ((($count_joiner + 1) / $ndu) <= $first_u) {
// 第一阶段
if (($count_joiner + 1) / $ndu == $first_u || ($count_joiner + 2) / $ndu > $first_u) {
// 当前阶段最后一个
$x = ($first_p * $amount) - ($amount - $surplus_amount);
} else {
$s = $amount - $surplus_amount - 0 * $amount; // 已砍价的
$y = round(($first_p * $amount * $sim) / ($first_u * $ndu), 2); // 每人基础值
$z = $y * $count_joiner; // 已砍价的总基础值
$t = $s - $z; // 已砍加的随机值
$p = ($first_p * $amount * (1 - $sim)) - $t; // 剩余水机区间
$p = $p > 0 ? $p : 0; // 保证取值有效性
$m = $count_joiner == 0 ? 0 : ($count_joiner) / ($first_u * $count_joiner) * 3; // 计算随机最大值
$m = $m > 100 ? 100 : ($m == 0 ? 30 : $m);
$x = $y + $p * mt_rand(0, $m) / 100;
}
} elseif ((($count_joiner + 1) / $ndu) <= 0.6) {
if (($count_joiner + 1) / $ndu == ($first_u + $second_u) || ($count_joiner + 2) / $ndu > ($first_u + $second_u)) {
// 本轮结束
$x = ($first_p + $second_p) * $amount - ($amount - $surplus_amount);
} else {
// 本轮参与人次
$s = round($amount - $surplus_amount - $first_p * $amount, 2); // 已砍价的
$y = round(($second_p * $amount * $sim) / ($second_u * $ndu), 2); // 每人基础值
$z = $y * ($count_joiner - $first_u * $ndu); // 已砍价的总基础值
$t = $s - $z; // 已砍加的随机值
$p = ($second_p * $amount * (1 - $sim)) - $t; // 剩余水机区间
$p = $p > 0 ? $p : 0;
$m = ($count_joiner - $first_u * $count_joiner) / ($second_u * $count_joiner) * 3;
$m = $m > 100 ? 100 : $m;
$x = $y + $p * mt_rand(0, $m) / 100;
}
} else {
$s = round($amount - $surplus_amount - $first_p * $amount - $second_p * $amount, 2); // 已砍价的
$y = round(($third_p * $amount * $sim) / ($third_u * $ndu), 2); // 每人基础值
$z = $y * ($count_joiner - $first_u * $ndu - $second_u * $ndu); // 已砍价的总基础值
$t = $s - $z; // 已砍加的随机值
$p = ($third_p * $amount * (1 - $sim)) - $t; // 剩余水机区间
$p = $p > 0 ? $p : 0;
$m = ($count_joiner - $first_u * $count_joiner - $second_u * $count_joiner) / ($third_u * $count_joiner) * 3;
$m = $m > 100 ? 100 : $m;
$x = $y + $p * mt_rand(0, $m) / 100;
}
$x = round($x, 2);
}
}
return ['last' => $last ,'x' => $x];
}
最后
以上就是孝顺乐曲为你收集整理的拼多多砍价算法 php的全部内容,希望文章能够帮你解决拼多多砍价算法 php所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复