我有一个金矿,每个周期20小时以一个黄金单位的速度生产黄金(20小时并不重要)。当它达到250金币时,它会立即购买另一个金矿(成本为250金币),所以现在每个周期生产两个黄金单位。
目前只能像这样模拟
int getCycles (int targetMines) {
int cycle = 0;
int goldMines = 1;
int balance = 0;
while (goldMines != targetMines) {
cycle++;
balance += goldMines;
if (balance / 250 >= 1) {
goldMines += balance / 250;
balance = balance % 250;
}
}
return cycle;
}
我正在寻找更优雅的解决方案(也许更多数学而不是计算?)来找到达到目标金矿数量所需的周期数(C)
答案 0 :(得分:0)
这将是对数的。如果每n个循环使金矿数量增加一倍,那么要达到m个金矿,你需要n * log base 2 of m
个循环。在这种情况下,它们每250个循环加倍,因此它将是250 * log2(m)循环。在C中将是
numCycles = 250.0 * log2 (numMinesDesired);