购买X的数学为Z获得Y.

时间:2016-01-07 10:43:42

标签: math

我正在开发一款POS软件,需要购买X Get Y For Z折扣架构,即:买5送2 5美元,这意味着如果您购买7件商品,5件商品是正常价格和2件商品( 6号,7号)是5美元。

这是此https://docs.google.com/spreadsheets/d/1ym93Xqnw6wupBEp9ei711wQPpt3s6QONjcqBO4Xc5X4/edit#gid=0

的电子表格

我希望算法在输入数量

时获得X和Y(打折项目)

即输入数量,它将返回买入5获得的X和Y

input 7 return X = 5, Y= 2

input 8 return X = 6, Y= 2
..

input 17 return X= 13,Y= 4

我正试图找到这个的公式,但我失败了。请帮助我谢谢

3 个答案:

答案 0 :(得分:2)

对于优惠"以$ P购买x并以$ Q"获得y如果您要购买总共q项,您想知道每个价格可以购买多少件商品。

最简单的方法是遍历每个项目,并确定它是以更便宜的价格还是以更昂贵的价格购买 -

qx = 0
qy = 0

for i = 0 : (q-1)
    m = mod(i, x + y)
    if m < x
        qx = qx + 1
    else
        qy = qy + 1
    end
end

每件商品只会计算一次,因此您可以保证qx + qy = q

答案 1 :(得分:1)

x = 5
y = 2
i = input

r = i % (x + y)
n = (i - r) / (x + y)
py = max(0, r - x) + (n * y)
px = i - py 

return x = px, y = py

为了解释,我用输入/(x + y)的模数/余数设置r。这是删除完成要约后剩余的数字。然后我通过从输入中减去余数并除以(x + y)来将n设置为完整商品的数量。然后使用n * y设置变量py,用于已完成商品的折扣价格的商品数量,并且如果是>,则添加r-x。最后,px是全价的商品数量,它只是输入值 - py。

在电子表格中,您尚未正确实现此功能。改变如下:

G2    =A2-F2
H2    =G2/($L$1+$L$2)
D2    =MAX(0,F2-$L$1)+H2*$L$2
E2    =A2-D2

答案 2 :(得分:0)

我认为它可以像这样工作(对于购买5 GET 2折扣的选项,它可以推广到其他选项):

int x = (input/7)*5;
int y = (input/7)*2;
if((input % 7) == 6){
   x+=5;
   y++;
}
else
   x += (input % 7);

如果输入是您的总物品数量x是全价物品的数量,y是打折物品的数量。

我正在处理只有一件商品单独打折的情况,但可能有办法更轻松地处理它。