我正在开发一款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
我正试图找到这个的公式,但我失败了。请帮助我谢谢
答案 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是打折物品的数量。
我正在处理只有一件商品单独打折的情况,但可能有办法更轻松地处理它。