0

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

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

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

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

现在有一个报价正在运行。用户可以购买 3 件产品 A 或产品 B(这些产品的任意组合 - 产品 A 的示例 2 和产品 B 的示例 2 或产品 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。(在最后一种情况下,他不会利用该提议)

请告诉我解决这个问题的最简单方法是什么?谁能指出一些解决此类问题的代码

4

2 回答 2

2

获取正在购买的产品 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 计算第二个报价)

于 2012-05-22T06:21:54.597 回答
1

也许这会帮助你:

交易示例:买 4 件PRODUCT_A 送2件PRODUCT_B

变量:

  • numSkuRequired:交易所需的产品数量(在本例中为 4)
  • skuRequired:交易所需的产品(在本例中为PRODUCT_A的标识符、sku/id 或其他东西)
  • numSkuFree:免费提供的产品数量(在这种情况下为 2)
  • skuFree:免费赠送的产品(在这种情况下为PRODUCT_B的标识符,sku/id 或其他东西)
  • quantityLookupRequired: PRODUCT_A在购物车中的总和,默认false
  • quantityLookupFree: PRODUCT_B在购物车中的总和,默认false
  • quantityFree:我们正在寻找的最终结果来计算总金额,免费产品的数量(PRODUCT_B),默认值0
  • price: PRODUCT_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

于 2012-10-15T16:09:52.063 回答