我在看这里发布的问题:
Algorithm for calculating total cost in groups of N
并且想知道如何确定一个人可以购买的最大物品,因为每N件物品的成本增加X.
举例来说,如果我有$ 20和要购买的东西,以$ 1的价格启动,但增加了$ 1每5个项目(作为一个例子),我能够购买他们的11,以$ 2离开(5美元1美元+ 5美元2美元+ 1美元3美元= 18美元)。
是否有可用于解决此问题的公式?
答案 0 :(得分:1)
当我们从1开始并且每n次增加1时,我将解释更简单的版本。在这里,我们需要先n
项n
,下一个2n
项n
,依此类推。假设我们可以获得最多k
个完整组(总项目是n
的倍数)。所以我们的总费用将是
n + 2*n + 3*n + ...+ k*n
This must be less than S. So
(1 + 2 + .... + k) * n <= S
=> k * (k+1) * n / 2 <= S
=> n * k ^ 2 + n * k - 2 * S=0
Solving for k we get
k = (-n + sqrt(n ^ 2 + 8 * n * S )) / (2 * n) // take floor value
现在剩下的钱是
S1 = S-(n * k * (k + 1)) / 2
我们仍然可以购买的商品数量是
a = S1 / (k + 1)
总数
k * n + a
剩下的钱是
S1 mod (k + 1)
例如S = 20
和n = 5
k = (-5 + sqrt(5 ^ 2 + 8 * 5 * 20))/(2 * 5) = 2.37 = 2 // floor
S1 = 20 - ( 5 * 2 * 3) / 2=5
a = 5 / (2 + 1)=1.66.. = 1 //floor
total = 2 * 5 + 1 = 11
money left = 5 mod 3 =2
从a
开始,您可以类似地推导出通用公式,每x
次增加值n
。在这种情况下,k应该是
k = (sqrt(((x - 2 * a) * n) ^ 2 + 8 * n * x * S) + (x - 2 * a)* n) / (2 * n * x)
v = a + k * x
S1 = S - (2 * a + (k - 1) * x) * k * n / 2
y = S1 / v
total = k * n + y
left = S1 mod v
答案 1 :(得分:0)
在购买价格的k补丁
之后,先将价格作为价格
让购买前k个补丁的成本为F(k),然后
让M成为你拥有的钱,你可以购买最多的补丁k * satify
购买k *补丁后,您还可以购买剩余的
项。
因此,您可以购买的总项目是:k * + r *。
我确信这是你期望的公式,: - )。