购物车中的特殊逻辑算法
本文关键字:算法 购物车 | 更新日期: 2023-09-27 18:34:57
我正在实现一个在 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(
我如何获得算法''伪代码来实现这一点?
男人的问题在于产品可以按任何顺序添加,例如按此顺序
添加产品 一,一,一
或
2A,B
或
A,C,D,B,A
或
交流,丙,丙,甲
2A表示他在一次操作中添加了2件产品A。(在最后一种情况下,他不会利用这个提议(
请告诉我解决这个问题的最简单方法是什么?任何人都可以指出一些解决此类问题的代码
获取正在购买的产品 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 计算第二个报价(
也许这会帮助你:
交易示例:买 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
步骤
- 在购物车中查找PRODUCT_A的总和,保存在可变
quantityLookupRequired
中 - 确保
quantityLookupRequired
>=
numSkuRequired
- 在购物车中查找PRODUCT_B总和,保存在可变
quantityLookupFree
中 - 确保
quantityLookupFree
>=
numSkuFree
- 查找PRODUCT_B的价格并保存在可变
price
中 - 循环(见下文(找到
quantityFree
(编辑器不允许我让它看起来更好抱歉(。 -
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(