2016-01-07 66 views
0

我正在研究POS软件,需要购买X获取Y Z折扣架构,即:买5送2 5 $,这意味着如果您购买7件商品,5项目是正常价格和2项(第6,第7)是5美元。Math for for X获取Y For Z

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

我想一个算法得到的X和Y(打折项目)的电子表格时输入量

即:输入量,它会返回X和Y用于购买5获取2

input 7 return X = 5, Y= 2 

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

input 17 return X= 13,Y= 4 

我在努力寻找这个配方,但我失败了。请帮我谢谢

+1

你的意思是'input = 17'应该返回'x = 13'和'y = 4'? –

回答

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 

要解释,我设置R与输入/(X + Y)的模/余数。这是在完成的优惠被移除后剩下的数字。然后,我通过从输入中减去余数并除以(x + y),将n设置为完整报价数。然后使用n * y设置变量py,使用n * y表示已完成报价的折扣价格的商品数量,如果大于0,则添加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 
+1

这给出了'i = 17'的错误答案。 –

+0

它给出了什么答案?我期望15和2 –

+0

这个问题自我的回答以来一直在编辑,所以这是假定每个客户只有一个报价。所以-1不是很公平。 –

0

我认为这可能是这样的工作(对于买5送2贴现的选项,它可以被推广到其他选项):

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

在哪里输入你的总物品数量x是全价货物的数量和折扣物品的数量。

我正在处理只有一个项目单独打折的情况,但可能有办法更容易地处理它。

2

发售“买x为$ P,并得到y为$ Q”你想看看有多少项目可以在每个价格,如果你是买在总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

+0

hi @Chris,您的公式不正确,数量= n(x + y)-1(6日,13日,20日,27日...) 请检查。 –

+1

哦,我明白你的意思了 - 如果你买6,你仍然可以以低廉的价格得到一个,以正常的价格得到5。我会解决它。 –

+0

hi @Chirs, 你有任何更新?我真的坚持这一点。请帮帮我。 我很感谢你的帮助。 –