以下是我想要弄清楚的几个示例场景:
假设杂货店商品列为4 for 5.00
。根据列出的交易,我们如何计算每件商品的单价?
一个简单的解决方案是将总价格除以列出的数量,在这种情况下,您将获得1.25
。
但是,在情况稍微复杂一些的情况下,例如3 for 5.00
,将价格除以数量大约会1.6666666666666667
,这会转到1.67
。
如果我们将所有三个项目都归结为1.67
,则总价格不是5.00
,而是5.01
。个别价格需要计算为1.67
,1.67
和1.66
才能正确累加。
3 for 4.00
之类的内容也是如此。数学单价为1.3333333333333333
,四舍五入为1.33
。但是,我们需要再次调整其中一个因为没有调整的实际价格为3.99
。单个价格需要1.34
,1.33
和1.33
才能正确合计。
是否有一种有效的方法来确定如何分割这样的价格交易以及如何确定调整后的金额以便各个价格合理加起来?
答案 0 :(得分:1)
如果你想将一个整数(例如便士)除以尽可能相等的部分,一种方法是通过在其中标记来划分该行的那一部分,因此n的部分i(从0开始计数) )当总数为T时,长度为((T *(i + 1))/ n) - floor((T * i)/ n)。
说3个项目的单个价格是1.67,1.67和1.66是否有意义是另一回事。你如何决定哪个项目便宜?
答案 1 :(得分:0)
由于我们在这里谈论基本数学,我说效率更多地取决于你的实现而不是算法。如果你说"有效",你的意思是你不想加上所有价格来检查剩余部分吗?这可以做到:
前提是,您以y的价格出售x项目,其中x显然是整数,y显然是一个舍入为2位小数的浮点数。
首先,您需要计算余数:R = (y*100)%x
。
项目的x-R将花费(y * 100 : x) /100
(其中":"表示整数除法和" /"表示浮动除法)
和项目的R将花费(y * 100 : x) / 100 + 0.01
该算法在理论上讲是有效的,因为它具有O(1)的复杂性。但是我想我记得在硬件方面没有多少比添加花车更有效率(不要接受我的话,我没有那么多地关注我的硬件讲座),所以也许粗略的方法是还是更好。