如何设计算法来计算多商品优惠后的最大折扣?

如何设计算法来计算多商品优惠后的最大折扣?

关于多商品优惠的算法难题

问题:

给你一批商品信息和它们的优惠折扣,以及你购买的商品清单,设计一个算法来计算使用这些优惠后能得到的最大折扣价格。

示例数据:

商品信息:

{id: 1, name: “a”, price: 10, discounts: [101, 102, 105]}{id: 2, name: “b”, price: 6, discounts: [101, 102, 105, 106]}{id: 3, name: “c”, price: 7, discounts: [101, 103, 107]}{id: 4, name: “d”, price: 7, discounts: [101, 104, 107]}

优惠信息:

{id: 101, type: “满减”, message: “满20减2”, full: 20, reduction: 2}{id: 102, type: “满减”, message: “满35减6”, full: 35, reduction: 6}{id: 103, type: “满减”, message: “满28减3”, full: 28, reduction: 3}{id: 104, type: “满减”, message: “满30减5”, full: 30, reduction: 5}{id: 105, type: “折扣”, message: “2件9.5折”, full: 2, reduction: 0.95}{id: 106, type: “折扣”, message: “3件7折”, full: 3, reduction: 0.7}{id: 107, type: “折扣”, message: “2件8折”, full: 2, reduction: 0.8}

购买清单:

算家云 算家云

高效、便捷的人工智能算力服务平台

算家云 37 查看详情 算家云 {id: 1, num: 3}{id: 2, num: 6}{id: 3, num: 3}

答案:

使用回溯法可以解这个问题:

求出每个商品的总价和折扣价:根据商品信息和购买数量,计算出每个商品的总价,并应用折扣(单品优惠)。构造满减优惠分组:根据满减优惠信息,将商品分组。同一组内的商品可以使用同一个满减优惠。回溯排列满减分组:使用回溯法,排列满减分组,并选择总价最优的组合。

具体算法实现(javascript):

function compute(goods) {  // 分组满减信息  const discountsmap = new map();  for (const good of goods) {    for (const discountid of good.discounts) {      const discount = discountsmap.get(discountid);      if (!discount) {        discountsmap.set(discountid, []);      }      discountsmap.get(discountid).push(good);    }  }  // 回溯排列满减组合  const compose = [];  for (const [discountid, discountgroup] of discountsmap) {    backtrackcompose(      0,      discountgroup,      discountsmap.get(discountid)[0].full,      discountsmap.get(discountid)[0].reduction,      [],      compose,      discountid    );  }  // 组合选择  const result = { total: 0, discount: 0, compose: [] };  backtrackselect(0, compose, [], new set(), result, 0);  result.total -= result.discount;  return result;}// 回溯排列满减组合function backtrackcompose(start, goods, target, discount, memo, res, disid) {  if (target <= 0) {    res.push([...memo]);    return;  }  for (let i = start; i  c[0] === g.id)) continue;    memo.push([g.id, discount, g.totalprice * (1 - g.discount), disid]);    backtrackcompose(i + 1, goods, target - g.totalprice * (1 - g.discount), discount, memo, res, disid);    memo.pop();  }}// 组合选择function backtrackselect(start, composes, trace, memo, res, discount) {  if (discount > res.discount) {    res.discount = discount;    res.compose = [...trace];  }  for (let i = start; i  memo.has(c[0]))) continue;    trace.push(cmp);    cmp.foreach((c) => memo.add(c[0]));    backtrackselect(i + 1, composes, trace, memo, res, discount + cmp[0][1]);    trace.pop();    cmp.foreach((c) => memo.delete(c[0]));  }}

计算示例:

const goods = [  { id: 1, name: "a", price: 10, discounts: [101, 102, 105] },  { id: 2, name: "b", price: 6, discounts: [101, 102, 105, 106] },  { id: 3, name: "c", price: 7, discounts: [101, 103, 107] },];const buylist = [  { id: 1, num: 3 },  { id: 2, num: 6 },  { id: 3, num: 3 },];const result = compute(goods, buylist);console.log(result);

输出结果:

{  total: 93.1,  discount: 11,  compose: [    [[1, 6, 28.5, 102], [2, 6, 25.2, 102]],    [[4, 5, 33.6, 104]],  ],}

在这个示例中,最终计算出的总价为 93.1 元,总折扣为 11 元,所使用的满减组合是 “[1, 6, 28.5, 102]”, “[2, 6, 25.2, 102]” 和 “[4, 5, 33.6, 104]」。

以上就是如何设计算法来计算多商品优惠后的最大折扣?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/450662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月7日 22:58:56
下一篇 2025年11月7日 22:59:53

相关推荐

  • 为什么说“新手死于追高,老手死于抄底”?在合约交易中如何避免这两种行为?

    新手死于追高,老手死于抄底,揭示了交易者因忽视趋势与风控而导致亏损的核心问题。追高易接盘,抄底易深套,应通过技术信号、分批建仓与系统化规则规避风险,建立如回踩入场、量价分析、金字塔加仓等策略,并严格控制单笔风险在2%以内,提升决策一致性。 Binance币安交易所 注册入口: APP下载: 欧易OK…

    2025年12月9日
    000
  • 什么是“蜡烛图形态”?“锤子线”和“上吊线”在合约中分别是什么信号?

    锤子线出现在下跌趋势后,长下影线显示多方反攻,需确认阳线收高于实体并可回踩不破底;上吊线现于上涨末端,长下影反映抛压加重,若次日阴线跌破实体且放量,则强化见顶信号。 Binance币安 欧易OKX ️ Huobi火币️ gateio芝麻   “蜡烛图形态”是通过K线的形状和位置判断市场情绪与价格走向…

    2025年12月9日
    000
  • AVAX币价格演变全过程 雪崩协议K线图2025最新数据

    AVAX价格2025年从20美元波动上行,9月触及35美元高点后回落,受技术形态与市场情绪影响,11月中旬报14.47美元,较前期高点显著回调。 binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: AVAX币价格在2…

    2025年12月9日
    000
  • 移动平均线(MA)的黄金交叉与死亡交叉: 趋势判断的经典信号解读

    黄金交叉预示上涨趋势启动,死亡交叉警示下跌开始。前者是短期均线上穿长期均线,伴随成交量放大;后者为短期均线下穿长期均线,反映卖压增强。通过多周期均线系统(如MA5、MA20、MA60)的排列与交叉验证,可提升信号可靠性,减少误判风险。 binance币安交易所 注册入口: APP下载: 欧易OKX交…

    2025年12月9日
    000
  • 雪崩协议(AVAX)价格历史回顾 AVAX币K线走势图2025版

    AVAX %ignore_a_1%价格走势呈上涨趋势,1月26日前后受GAO或采用其链的预测推动,价格一度达36.75美元,日内涨幅3.52%,交易量达5.86亿美元,日线形成多头排列,RSI位于健康区间,MACD现金叉,叠加生态发展与技术升级,市场信心增强。 binance币安交易所 注册入口: …

    2025年12月9日
    000
  • BTC价格十年走势全记录 比特币牛熊周期K线图2025详解

    比特币十年价格从2015年200美元升至2025年超10万美元,经历多轮牛熊周期;2025年技术面显示短期反弹但趋势偏弱,关键支撑106,800美元,阻力110,255美元;长期受机构增持、减半效应、降息预期及 adoption 扩大驱动。 Binance币安 欧易OKX ️ Huobi火币️ ga…

    2025年12月9日
    000
  • 如何运用技术分析(TA)预测币价走势? K线图、均线与MACD指标的组合使用技巧

    通过K线、均线与MACD组合分析可有效识别加密货币趋势。首先,K线形态揭示市场情绪,长下影线或早晨之星等信号结合成交量判断支撑与阻力;其次,均线系统用于确认趋势方向,金叉、死叉及多空排列反映趋势强弱;再次,MACD衡量动能变化,DIF与DEA交叉、柱状图缩放及顶背离提示动量转折;最后,多指标协同验证…

    2025年12月9日
    000
  • 比特币(BTC)的下跌与过去的复苏相似——但这一次一个风险突出

    Binance币安 欧易OKX ️ Huobi火币️ 核心要点 为何BTC或已接近市场底部? 短期持有者的亏损程度显著,叠加价格自历史高点回落的幅度,与此前数轮市场触底前的走势高度相似。 当前是明确的入场时机吗? 尚不构成明确信号,但存在潜在的高风险高回报机会。考虑到整体市场情绪偏弱,即使出现反弹,…

    2025年12月9日
    000
  • 市场深度是什么 虚拟货币交易所的交易深度对交易成本有何影响

    市场深度反映交易对的流动性,由订单簿中买卖挂单的数量和价格分布决定。深度越好,买卖价差越小,大额订单越容易成交且滑点越低;深度越差,价格波动越大,小额交易也可能因订单稀疏导致高滑点。选择主流交易所和高流动性币种、使用限价单可有效降低交易成本。 币圈入门指南:市场深度是什么 欢迎来到虚拟货币的世界。当…

    2025年12月9日
    000
  • 什么是“订单簿”?交易所里买卖盘怎么看?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 订单簿是加密货币交易中实时展示某一交易对所有未成交买卖订单的列表,反映了市场的供需状况。 一、理解订单簿的基本结构 订单簿分为买方(Bid)和卖方(Ask)两个部分…

    2025年12月9日
    000
  • 一文读懂比特币:它到底是什么,又是如何运作的?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 比特币是一种去中心化的数字货币,基于区块链技术运行,通过点对点网络实现安全交易。 一、比特币的本质与特性 比特币并非由任何中央机构发行,而是通过数学算法和密码学原理…

    2025年12月9日
    000
  • 大白话讲懂“最大可提取价值”(MEV)

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 最大可提取价值(MEV)是指矿工或验证者通过调整交易顺序获取的额外利润。 一、理解MEV的基本概念 MEV源于区块链中交易打包的灵活性。矿工有权决定将哪些交易放入区…

    2025年12月9日
    000
  • 币安Binance安卓App下载 币安官网2025最新地址

    币安binance安卓app下载官网2025最新地址在哪里?这是不少网友都关注的,接下来由php小编为大家带来币安binance安卓app下载官网2025最新地址,感兴趣的网友一起随小编来瞧瞧吧! 币安官网2025最新地址: 币安Binance安卓App下载: 1、平台提供多样化的数字资产交易服务,…

    2025年12月9日
    000
  • 什么是私钥和助记词?弄丢了比特币就没了吗?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 私钥和助记词是您加密资产的最高所有权证明,是您访问和控制比特币等数字货币的唯一钥匙。一旦丢失,资产将面临永久丢失的风险,后果非常严重。 什么是私钥? 1、私钥本质上…

    2025年12月9日
    000
  • 欧易OKX交易平台官方下载 OKE安卓手机客户端v6.146.0

    欧易okx交易平台官方下载 oke安卓手机客户端v6.146.0在哪里?这是不少网友都关注的,接下来由php小编为大家带来欧易okx交易平台官方下载地址及oke安卓手机客户端v6.146.0的相关信息,感兴趣的网友一起随小编来瞧瞧吧! OKE安卓手机客户端v6.146.0下载: 欧易OKX交易平台官…

    2025年12月9日
    000
  • 一文详解加密货币订单簿,加密货币中的订单簿是什么?怎么运作?

    加密货币市场的核心机制之一便是订单簿。它详细记录了特定加密资产在交易所中的买卖意向,是市场供需关系最直观的体现。订单簿不仅展示了不同价格水平上的买卖数量,还揭示了市场深度、流动性以及潜在的价格支撑与阻力位。 对于投资者而言,理解订单簿的运作原理至关重要,因为它能帮助他们更好地判断市场情绪,制定交易策…

    2025年12月9日
    000
  • 比特币新手必知必会知识_通俗类比讲透比特币运作

    比特币新手必知必会知识:通俗类比讲透比特币运作 比特币,一个在新闻和网络上频繁出现的词汇,听起来既神秘又高科技。很多人一听到“区块链”、“加密”、“挖k”这些词就头大。但其实,比特币的核心运作原理,完全可以通过我们生活中常见的例子来轻松理解。本文将用最通俗的类比,为你彻底讲明白比特币到底是怎么一回事…

    2025年12月9日
    000
  • 欧易OKX安卓App v6.145.0 最新官方下载链接

    欧易okx安卓app v6.145.0 官方版在哪里下载?这是不少网友都关注的,接下来由php小编为大家带来欧易okx安卓app v6.145.0 官方版下载地址,感兴趣的网友一起随小编来瞧瞧吧! 欧易OKX安卓App v6.145.0 最新官方下载: 欧易OKX官网入口: 1、支持多终端同步使用,…

    2025年12月9日
    000
  • 比特币价格预测:2025年能否突破20万美元?下一步是暴跌,还是再创新高?

    近期比特币市场波动显著,多位分析师对btc后市走向提出了前瞻性预判。分析师john结合技术面与基本面指出,比特币正处于重要转折点,短期或挑战10.8万美元阻力位,而长期有望在2026年冲击20万美元高点。本文将围绕spacex持仓动向、美国监管进展及技术信号等核心要素,全面解析比特币未来走势。 Bi…

    2025年12月9日
    000
  • 交易所的挂单、市价单怎么用?掌握基本交易操作!

    在瞬息万变的数字资产市场中,掌握基本的交易操作是每一位参与者成功的基石。本文将深入探讨“交易所的挂单、市价单怎么用?掌握基本交易操作!”这一核心主题,旨在帮助您理解并熟练运用这两种最常见的交易指令。了解它们之间的区别,并根据您的交易策略和市场状况选择合适的订单类型,将极大地提升您的交易效率和风险控制…

    好文分享 2025年12月9日
    000

发表回复

登录后才能评论
关注微信