我是靠谱客的博主 孝顺乐曲,最近开发中收集的这篇文章主要介绍拼多多砍价算法 php,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

# 话不多说,直接看代码.可以根据需求调整区间

/**
 * @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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部