我在这个案例中选择了 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/