- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我为这个案例选择了 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 - 如何将水果堆放整齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912088/
我正在尝试堆叠盒子。如果我垂直开始,我知道该怎么做,比如从顶部开始然后向下。我的问题是,我该怎么做横向? Here is how i did it vertically Here is how i t
我是一名优秀的程序员,十分优秀!