确定, 所以这是现有数学实践的应用,但我不能真正将它们应用到我的案例中。
因此,我使用x
货币来提高游戏对象y
的费用z
。
z
在cost(y.lvl) = c_1 * c_2^y.lvl / c_3
中计算,其中c是常量。
我正在寻找一种有效的计算方法,在给定y
的情况下,我可以多久提高x
的等级。目前我正在使用一个类似这样的循环:
double tempX = x;
int counter = 0;
while(tempX >= cost(y.lvl+counter)){
tempX-=cost(y.lvl)+counter;
counter++;
}
问题是,在某些情况下,这个循环必须迭代太多次才能保持高效。
我正在寻找的本质上是一种功能
int howManyCanBeBought(x,y.lvl)
,它可以一次性计算结果,而不是循环很多次。
我已经阅读了一些关于将递归转换为生成函数并将它们转换为闭合公式的内容,但我没有得到它背后的数学。有一个简单的方法吗?
答案 0 :(得分:1)
如果我理解正确,你正在寻找最大的n:
Σ i = 0..n c 1 / c 3 c 2 lvl +我≤x
除以常数因子:
Σ i = 0..n c 2 i ≤c 3 /(c 1 c 2 lvl )x
使用几何系列之和的公式:
(c 2 n + 1 - 1)/(c 2 - 1)≤c 3 /(c 1 c 2 lvl )x
求解最大整数:
n = floor(log c 2 (c 3 (c 2 - 1)/(c 1 c 2 lvl )x + 1) - 1)