如何将水果堆放整齐
How to stack fruit in a neat pile
我为这个案例选择了 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个三角数给出,由方程
给出
Tn = n(n + 1) / 2
例如,高度为 2 的金字塔有 2(2 + 1) / 2 = 3 个水果。高度为 4 的金字塔可容纳 4(4 + 1) / 2 = 10 个水果。
如果你有 k 个水果要放入一叠,你正在寻找满足 Tn ≥ k 的最小数字 n。你可以直接解决这个问题:
Tn = k
n(n + 1) / 2 = k
n2 + n = 2k
n2 + 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 来存储水果。
希望对您有所帮助!
我为这个案例选择了 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个三角数给出,由方程
给出Tn = n(n + 1) / 2
例如,高度为 2 的金字塔有 2(2 + 1) / 2 = 3 个水果。高度为 4 的金字塔可容纳 4(4 + 1) / 2 = 10 个水果。
如果你有 k 个水果要放入一叠,你正在寻找满足 Tn ≥ k 的最小数字 n。你可以直接解决这个问题:
Tn = k
n(n + 1) / 2 = k
n2 + n = 2k
n2 + 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 来存储水果。
希望对您有所帮助!