Как складывать фрукты в аккуратную стопку

Я выбрал Java для этого случая, потому что язык достаточно прост для любого перевода.

Каким должен быть математический алгоритм для определения количества фруктов, требуемого в нижней строке, чтобы сложить число фруктов в такой схеме? (игнорируя силу 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
}

1 ответ

Решение

Количество плодов в пирамиде высотой n задается n -ным треугольным числом, определяемым уравнением

Tn = n (n + 1) / 2

Например, пирамида высотой 2 содержит 2 (2 + 1) / 2 = 3 фрукта. Пирамида высотой 4 содержит 4 (4 + 1) / 2 = 10 фруктов.

Если у вас есть 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 для хранения фруктов.

Надеюсь это поможет!

Другие вопросы по тегам