Java 如何把水果整齐地堆成一堆
我选择Java来处理这个问题,因为Java语言非常简单,任何人都可以翻译 用什么数学算法来确定底线上的水果数量,以这样的模式堆叠X个水果?(忽略2的幂,我将其堆叠在一个正方形中) 起初我认为这很容易,但随着数字越来越高,我开始认为这更像是一个阶乘 编辑:添加从@templatetypedef提供的以下答案翻译过来的代码Java 如何把水果整齐地堆成一堆,java,math,factorial,Java,Math,Factorial,我选择Java来处理这个问题,因为Java语言非常简单,任何人都可以翻译 用什么数学算法来确定底线上的水果数量,以这样的模式堆叠X个水果?(忽略2的幂,我将其堆叠在一个正方形中) 起初我认为这很容易,但随着数字越来越高,我开始认为这更像是一个阶乘 编辑:添加从@templatetypedef提供的以下答案翻译过来的代码 private int _getBottomLineCount() { double insideSquareRoot = (8 * numberOfApples) +1
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个水果要放进一堆,你要找的是最小的n,比如Tn≥ K您可以直接解决此问题: 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的水果来储存水果
希望这有帮助 先从相反的角度看。回答以下问题:“如果底线上的水果数量为n,您可以堆叠的最大水果数量是多少?”?一旦你明白了这一点,你应该能够用高中代数来回答你原来的问题。你介意再往前走一步吗?或者只是澄清部分空行是否可以?如果你对部分空行没有问题,那么当前的答案是可行的,但如果不是,则需要更多的努力。另外,如何在一个正方形中叠加2的奇数幂?如果你真的要叠加水果,那么应该在三维中进行。@Teepeemm这取决于水果。我想你可以像发问者描述的那样叠香蕉。橘子,没那么多。三角形/金字塔的高度正是我所需要的!起初,我在代码中遇到了一些怪癖,但这是我意外添加的额外+1。你的数学算出来了,谢谢你的精彩解释(和例子)!
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
}