-3

我有一个金矿,每 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)

4

1 回答 1

0

这将是对数的。如果每 n 个循环它会使金矿翻倍,那么要达到 m 个金矿,您需要n * log base 2 of m循环。在这种情况下,它们每 250 个周期加倍,因此将是 250 * log2 (m) 个周期。在 C 中,那将是

numCycles = 250.0 * log2 (numMinesDesired);
于 2013-08-12T06:08:23.123 回答