Функция распределения выигрыша для участников (PHP)

Сергей12 років у сервісі
Дані замовника будуть вам доступні після подання заявки
10.02.2016

Входящие данные:

1. Имеется призовой фонд в размере N.

2. Количество участников (P) между которыми распределяется призовой фонд варьируется от 100 и до 100000+ (для понимания порядка чисел)

3. Ограничивается минимальный выигрыш, для любого участника, значением M.

4. N всегда >= P * 100

5. M всегда

Принцип, приблизительный, распределения выигрыша для первых мест:

1-е место - F * N (коэффициент (F) может задаваться от 0.15 до 0.25)

2-е место - 0.52 от 1-го места

3-е место - 0.54 от 2-го места

4-е место - 0.56 от 3-го места

5-е место - 0.58 от 4-го места

6-е место - 0.6 от 5-го места и т.д.

То есть, должно получиться немного неравномерное распределение выигрыша в размере примерно 0.5 * N в сумме на первые 20-30 мест. Остальной призовой фонд распределяется между оставшимися участниками полностью со снижением от последнего значения, получившегося на 20-30 месте.

Необходимо соблюсти следующие условия:

1. Весь призовой фонд должен быть распределен полностью.

2. Каждый из указанного количества участников должен получить приз не менее M.

3. Разница для каждого участника между предыдущей призовой суммой и его должна быть всегда больше, чем между его и последующей, либо равна. Данное правило для участников со 2-го и по предпоследнего.

4. Функция должна выдавать результат работы за время не более 0.1 секунды на "офисном пк" при значении P до 100000.

Язык внедрения: PHP. Интерфейс примерно такой:

function distribution( N, P, M, F ){

return $result; // Array

}

Заявки фрілансерів