我在这个案例中选择了 Java,因为该语言足够简单,任何人都可以翻译。

什么是数学算法来确定以这样的模式堆叠 X 个水果所需的底线上的水果数量? (忽略 2 的幂,我堆叠在一个正方形中)

 *  1
 * 2 3          = 2
 *
 *  1 2
 * 3 4 5        = 3
 *
 *   1
 *  2 3
 * 4 5 6        = 3
 *
 *  1 2 3
 * 4 5 6 7      = 4
 *
 *   1 2
 *  3 4 5
 * 6 7 8 9      = 4
 *
 *    1
 *   2 3
 *  4 5 6
 * 7 8 9 X      = 4
 *
 *   1 2 3
 *  3 4 5 6
 * 7 8 9 X 1    = 5

最初我认为这很容易,但随着数字越来越高,我开始认为这更像是一个阶乘。

编辑:添加从@templatetypedef 下面提供的答案翻译的代码
private int _getBottomLineCount() {
    double insideSquareRoot = (8 * numberOfApples) +1;
    double squareRoot = Math.sqrt(insideSquareRoot);
    double val = (squareRoot -1) /2;

    return (int) Math.ceil(val); // Round it up to nearest whole number
}

最佳答案

高度为 n 的金字塔中的水果数量由第 n 个三角形数给出,由等式给出



例如,高度为 2 的金字塔可容纳 2(2 + 1)/2 = 3 个水果。高度为 4 的金字塔可容纳 4(4 + 1)/2 = 10 个水果。

如果您有 k 个水果要放入堆栈中,那么您正在寻找最小的数字 n,使得 Tn ≥ k。你可以直接解决这个问题:



使用二次公式给出



这里的负根可以忽略,所以你的数字 n 应该由



该数字可能不是整数,在这种情况下您需要四舍五入。

让我们尝试一些例子。假设你有 9 个水果要堆放。我们可以评估上面的公式得到



向上取整得到 k = 4,因此您需要一堆高度为 4 的堆栈。

假设你有 137 个水果要堆放。相同的公式返回 n = 16.060495162,因此您需要一堆高度为 17 的水果来存储水果。

希望这可以帮助!

关于java - 如何将水果堆成整齐的一堆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27912088/

10-10 14:36