【问题标题】:Special logic\algorithm in Shopping Cart购物车中的特殊逻辑\算法
【发布时间】:2012-05-22 06:05:37
【问题描述】:

我正在用 c# 实现一个有购物车的网站。

假设我的数据库中有这些产品

产品 A 价格 50
产品 B 价格 50
产品 C 价格 50
产品 D 价格 50

用户可以将这些产品添加到他的购物车。

现在有一个报价正在运行。 用户可以购买 3 件产品 A 或产品 B(这些产品的任意组合 - 产品 A 的示例 2 和产品 B 的 1 或产品 A 的所有 3 件),他将免费获得一件。

(所以在这个例子中,如果他买了 3 件,他必须支付 100,4 然后支付 150 和 5 件,然后他必须支付 200,6 件也支付 200)

我如何获得算法\伪代码来实现这个?

人的问题在于产品可以按任何顺序添加,例如产品按此顺序添加
A,A,A

2A,B

A,C,D,B,A

A,C,C,A

2A 表示他在一个动作中添加了 2 件产品 A。 (在最后一种情况下,他不会利用那个提议)

请告诉我解决这个问题的最简单方法是什么? 任何人都可以指出一些解决此类问题的代码

【问题讨论】:

  • 还有一个复杂的问题。还有另一套优惠,如果您购买 5 of A,那么您将免费获得 2。

标签: c# algorithm shopping-cart


【解决方案1】:

获取正在购买的产品 A 和产品 B 的总数,然后除以 3 来查看有多少产品是免费的。 例如。

int cost = 50;
int a = numOfProductA();
int b = numOfProductB();
int total = a + b;
int totalFree = total/3;
int totalCost = (total - totalFree)*cost;

可能有一种有效的方法来做到这一点,尽管更多信息会很好:) 就像获得 A 或 B 的数量一样困难吗?一些显示你已经尝试过的代码会很好。

编辑:回应您的评论,这将是非常相似的逻辑。我不会给你代码,因为我相信你可以从我之前的示例中自己弄清楚,这将帮助你更好地学习:) 但是,粗略地说,我会先找到 5 A 的实例,然后删除他们从购买的数量,然后算出 3 A 或 B 免费项目。 (例如,如果有7个A和1个B,发现有5个A存在,给两个免费然后计算剩下的,所以2个A和1个B来计算第二个offer)

【讨论】:

  • Hi Nashi 感谢您的评论,在原问题中添加了评论。
  • 是的,谢谢,我会尽量扩展你的想法
【解决方案2】:

也许这会对你有所帮助:

示例交易:购买 4 件 PRODUCT_A 可免费获得 2 件 PRODUCT_B

变量:

  • numSkuRequired:交易所需的产品数量(在本例中为 4)
  • skuRequired:交易所需的产品(在本例中为 PRODUCT_A 的标识符、sku/id 或其他东西)
  • numSkuFree:免费提供的产品数量(在本例中为 2)
  • skuFree:免费赠送的产品(在本例中为 PRODUCT_B 的标识符、sku/id 或其他东西)
  • quantityLookupRequiredPRODUCT_A在购物车中的总和,默认false
  • quantityLookupFreePRODUCT_B在购物车中的总和,默认false
  • quantityFree:我们正在寻找的最终结果来计算总量,免费产品的数量(PRODUCT_B),默认0
  • pricePRODUCT_B的价格,默认0
  • discount:总折扣金额,默认0

步骤

  1. 在购物车中找到 PRODUCT_A 的总和,保存在变量 quantityLookupRequired
  2. 确保quantityLookupRequired>= numSkuRequired
  3. 在购物车中找到 PRODUCT_B 的总和,保存在变量 quantityLookupFree
  4. 确保quantityLookupFree>= numSkuFree
  5. 找到PRODUCT_B的价格并保存在变量price
  6. 循环(见下文)找到quantityFree(编辑不允许我让这个看起来更好,抱歉)。
  7. discount 将是 quantityFree * price

for(int i = 0; i < numSkuRequired + numSkuFree; i <= quantityLookupRequired + quantityLookupFree; i += (numSkuRequired + numSkuFree)) { quantityFree += numSkuFree; } while(quantityFree % numSkuFree != 0)/* don't allow partial discounts */ { quantityFree--; } discount = quantityFree * price;

注意:当交易仅包含 1 件产品时(购买 4 件 PRODUCT_A 可免费获得 2 件 PRODUCT_A

【讨论】:

  • 这种方法略有不同是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多