我为这种情况选择了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
}
答案 0 :(得分:4)
高度为n的金字塔中的果实数量由第n个三角数给出,由等式给出
T n = n(n + 1)/ 2
例如,高度为2的金字塔可容纳2(2 + 1)/ 2 = 3个水果。高度为4的金字塔可容纳4(4 + 1)/ 2 = 10个水果。
如果你有k个水果放入堆叠,你正在寻找最小的数字n,使得T n ≥k。你可以直接解决这个问题:
T n = k
n(n + 1)/ 2 = k
n 2 + n = 2k
n 2 + n - 2k = 0
使用二次公式给出
n =( - 1±√(1 + 8k))/ 2
此处的否定根可以忽略,因此您的数字n应由
给出n =(√(8k + 1) - 1)/ 2
这个数字可能不是整数,在这种情况下你要整理。
让我们试试一些例子。假设您有9个水果堆叠。我们可以评估上面的公式来获得
n =(√(72 + 1) - 1)/ 2 =(√(73) - 1)/ 2 = 3.772001873
舍入得到k = 4,所以你需要一个高度为4的堆栈。
假设你有137个水果堆叠。相同的公式给出了n = 16.060495162,因此您需要一个高度为17的堆栈来存储水果。
希望这有帮助!