-1

折扣计算:

Product quantity and range

1  - 10    -    1%
11 - 20    -    2%
21 - 30    -    3%
31 - 40    -    4%
41 - 50    -    5%

以上是数量范围和他们给出的折扣百分比,

for example:
each product cost is 100
if i purchase 50 product then 5% discount is 250


Now if i purchase 50 products at 2 terms let say 20 and 30 then
for 20 product 2% discount = 40
for 30 product 3% discount = 90
total discount             = 130

但在这里我必须得到250的折扣,

问题描述:产品可以购买n个条款的最大数量,这里最大数量是50。购买产品的折扣%是从上述范围内给出的。当添加总折扣时,它应该是相等的。在这里,当购买 50 件产品时,给予 250 作为折扣,即使产品以 20、10、10 或 25、25 的形式购买,250 也应该是总折扣......

请帮我计算部分,用一些公式或任何东西....

4

2 回答 2

1

我假设您希望折扣率始终随着购买商品数量的增加而增加,如果是这种情况,就没有办法做到这一点

这是逻辑。基本方程是:

n 1 d 1 + n 2 d 2 + n 3 d 3 = (n 1 + n 2 + n 3 )d x

一个明显的解决方案是让所有的 d 都相等,也就是说,所有的贴现率都相同。否则,没有一般的解决方案(也就是说,没有一组 d 将适用于所有 n 组合 - 例如,只要 n 中的一个以外的所有 n 都为零,那么等式两边的 d必须相同,所以唯一的通用解决方案是所有 d 都是相同的),如果您想要一个具有不同 d 的特定解决方案,您可以在给定一组 n 的情况下求解 d 的正确值,但是当您这样做时,很明显是否其中一个 d 小于 d x,另一个必须更大,因此您不能严格增加贴现率。

于 2012-08-04T20:47:52.120 回答
1
  1. 计算上一个项目计数的折扣。(之前给过多少折扣。)
  2. 计算新商品数量的折扣(上一个 + 当前订单)。(客户应该有多少折扣。)
  3. 给出最终折扣作为两个值之间的差异。
  4. 将客户的新项目计数(每种类型)存储到某个数据库中。
float SimpleDiscount(float cost, int count)
{
    if (count <= 0) return 0;
    if (count <= 10) return 0.01f * cost;
    if (count <= 20) return 0.02f * cost;
    if (count <= 30) return 0.03f * cost;
    if (count <= 40) return 0.04f * cost;
    return 0.05f * cost; // count > 40
}

float GetDiscount(int customerId, int itemId, int count)
{
    float cost = GetItemCost(itemId);

    int previousCount = GetCustomerOrderedItemCount(customerId, itemId);
    float previousDiscount = SimpleDiscount(cost, previousCount);

    int newCount = previousCount + count;
    float newDiscount = SimpleDiscount(cost, newCount);

    SaveCustomerOrderedItemCount(customerId, itemId, newCount);

    return newDiscount - previousDiscount;
}

例如:

Item cost = 100
For 20 items: Discount = 40 (2%)
For 30 items: Discount = 210 (7%)
Total discount = 250 (5%)
于 2012-08-03T02:01:29.680 回答