Функция распределения выигрыша для участников (PHP)
Входящие данные:
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
}