首页 > 其他分享 >随机商品*数量接近目标最低价

随机商品*数量接近目标最低价

时间:2024-03-21 23:47:46浏览次数:27  
标签:index product price selected products 随机 接近 order 最低价

今天接到一个网单,编写一个算法,传入一个商品数组,获取5个商品,每个商品的数量随机,商品*数量=设定目标接近价,目前想到的办法只有递归。
代码如下:
protected function execute()
{
    $products = [];
    for ($i = 1; $i <= 100; $i++) {
        $products[] = [
            "id" => $i,
            "name" => "商品" . $i,
            "price" => rand(1, 100),
        ];
    }
    $result = self::get_random_order($products, 1000);
    print_r($result);

}

public static function get_random_order($products, $order_amount)
{
    //随机5个商品
    $selected_indices = array_rand($products, 5);
    $selected_products = array_intersect_key($products, array_flip($selected_indices));
    $min_product_price = min(array_column($selected_products, 'price'));

    //随机商品数量
    $quantities = [];
    foreach ($selected_products as $product_index => $product) {
        $quantities[$product_index] = rand(1, intval($order_amount / $product["price"])); // 随机选择商品数量
    }

    // 计算总价
    $total_price = array_reduce(array_keys($selected_products), function ($carry, $product_index) use ($selected_products, $quantities) {
        // 使用商品的索引作为键来访问 $quantities 数组
        return $carry + $selected_products[$product_index]["price"] * $quantities[$product_index];
    }, 0);

    // 加入商品数量
    foreach ($selected_products as $product_index => $product) {
        $selected_products[$product_index]["quantity"] = $quantities[$product_index];
    }

    if (abs($total_price - $order_amount) < $min_product_price) { // 如果总价与订单金额相近,则返回结果
        return ["products" => $selected_products, "total_price" => $total_price, "min_product_price" => $min_product_price];
    } else {
        return self::get_random_order($products, $order_amount); // 重新生成订单
    }
}

 

 

标签:index,product,price,selected,products,随机,接近,order,最低价
From: https://www.cnblogs.com/bpsh/p/18088480

相关文章

  • Python众筹项目结果预测:优化后随机森林分类器可视化
    全文链接:https://tecdat.cn/?p=35412原文出处:拓端数据部落公众号分析师:YiChenXia随着信息技术的飞速发展,众筹作为一个互联网金融的子领域已经成为个人和小企业主筹集资金支持梦想的创新渠道。无论对于众筹发起者还是众筹平台而言,如何利用历史数据去准确预测一个众筹项目的成功......
  • 使用概率分析与指示器随机变量解决生日悖论问题及C代码示例
    概率分析与指示器随机变量解决生日悖论问题一、引言二、生日悖论的概率分析三、指示器随机变量解决生日悖论问题四、C代码实现五、结论与启示一、引言在日常生活中,我们经常会遇到一些与概率相关的问题,其中生日悖论就是一个非常有趣且典型的例子。生日悖论指的是在一......
  • 【随机潮流】基于半不变量的概率潮流计算【IEEE34节点】(Matlab代码实现)
    ......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出。本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法:  sim<-svsim(1000,mu=-9,phi=0.97,sigma......
  • CF765F,CF1793F,JSOI2009:区间最接近的两数
    link:https://codeforces.com/contest/765/problem/F据说是典中典问题(出现三次了)题意:给一个序列\(a_1,\dots,a_n\),有\(m\)次询问,每次询问给\(l,r(1\leql<r\leqn)\)问\(\min_{l\leqs<t\leqr}|a_s-a_t|\)\(1\leqn,m\leq10^5,a_i\leq10^9\).思路这个做法还是很妙,想......
  • CF1514D-区间(绝对)众数-莫队、随机化、可持久化线段树
    link:https://codeforces.com/contest/1514/problem/D很久以前小号打的场了,当时D题写的莫队,现在重新来看看。题意:给一个序列\([a_1,\dots,a_n]\),有q次询问,每次问:把\([a_l,\dots,a_r]\)划分最少几个不相交子序列,才能使得每个子序列是beautiful的。称一个序列\(a_1,\dots,a_x\)......
  • uniapp微信小程序随机生成canvas-id报错?
    uniapp微信小程序随机生成canvas-id报错?文章目录uniapp微信小程序随机生成canvas-id报错?效果图遇到问题解决场景:子组件,在mounted绘制canvas;App、H5端正常显示,微信小程序报错;效果图遇到问题随机生成canvas-id方式,控制台报错【:canvas-idattributeisun......
  • LCR 071. 按权重随机选择
    题目:给定一个正整数数组w,其中w[i]代表下标i的权重(下标从0开始),请写一个函数pickIndex,它可以随机地获取下标i,选取下标i的概率与w[i]成正比。例如,对于w=[1,3],挑选下标0的概率为1/(1+3)=0.25(即,25%),而选取下标1的概率为3/(1+3)=0.75(即,75%)。也......
  • 基于减法平均算法改进的随机森林分类算法 - 附代码
    基于减法平均算法改进的随机森林分类算法-附代码文章目录基于减法平均算法改进的随机森林分类算法-附代码1.数据集2.RF模型3.基于减法平均算法优化的RF4.测试结果5.Matlab代码摘要:为了提高随机森林数据的分类预测准确率,对随机森林中的树木个数和最小叶子点数参......
  • [C++] C++生成随机数
    一、简介在C语言中常使用srand()+random()的方式生成随机数,该方式并不是一个很好的随据说生成方法,一方面是因为其生成的随机数质量较低,另一方面其随机数范围也有所限制。在C++11中推荐使用随机数引擎的方式生成随机数。如何高效得生成高质量得随机数(甚至需要满足指定分布)是一个......