Разделите фиксированный призовой фонд на ранжированные уровни по схеме деления пополам: каждый следующий уровень получает примерно половину остатка, поэтому верхний уровень забирает большую часть бюджета, а меньшие поощрительные суммы остаются. Организаторы конкурсов используют эту схему, когда нужна крутая кривая выплат без ручной настройки каждой доли.
Алгоритм
При неотрицательной сумме T и количестве уровней n (по умолчанию пять) функция идёт от самого низкого уровня вверх, многократно присваивая round(остаток / 2) и вычитая эту сумму из остатка. Остаток после округления добавляется к последнему уровню, чтобы доли в сумме давали ровно T. Итоговый массив упорядочен от наименьшего уровня к наибольшему.
Когда пользоваться
- Призовые фонды конкурсов или турниров, где верхний уровень должен доминировать в выплате
- Викторины или лиги с фиксированным бюджетом и пятью уровнями выплат
- Быстрая оценка того, как выглядит крутое разделение 50/25/…, перед печатью призовых карточек
Ограничения
Деление пополам — эвристика округления, а не формальная модель вероятности или справедливости. Округление может привести к разнице в одну денежную единицу между соседними уровнями. Налоги, сборы и спонсируемые физические призы не учитываются. Отрицательные суммы и недопустимые количества отклоняются. Форматирование валюты остаётся на вашей стороне — значения представляют собой простые числа.
Пример
Для фонда в 1000, разделённого на 5 уровней, алгоритм даёт примерно [31, 63, 125, 250, 531] (от наименьшего к наибольшему). Пять сумм в итоге дают 1000; верхний уровень составляет примерно половину исходного фонда после последовательных делений остатка пополам.
Финансовая оговорка
Разделение призов — лишь иллюстративный инструмент планирования. Это не финансовая, налоговая или юридическая консультация. Уточните местные правила проведения конкурсов и защиты потребителей и относитесь к выплатам как к оценкам до применения ваших бухгалтерских или правовых требований.