寻找模拟算法

时间:2013-08-12 04:56:58

标签: algorithm math

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

1 个答案:

答案 0 :(得分:0)

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

numCycles = 250.0 * log2 (numMinesDesired);