LINUX.ORG.RU

История изменений

Исправление unC0Rr, (текущая версия) :

Быстрый способ без каких-либо проверок внутри цикла: пусть A и B - это границы возможных отрезков, n - число отрезков, L - необходимая сумма длин всех отрезков. Находишь l=L/n - среднюю длину отрезков. Находишь p=min(l-A, B-l) - максимальное отклонение от среднего, которое ты можешь себе позволить с этим алгоритмом. Генерируешь отрезки парами, n-ая пара имеет длины l±p*0.95ⁿ. Константу подбираешь по вкусу, с нечётным количеством отрезков один отрезок остаётся длиной l.

Исходная версия unC0Rr, :

Быстрый способ без каких-либо проверок внутри цикла: пусть A и B - это границы возможных отрезков, n - число отрезков, L - необходимая сумма длин всех отрезков. Находишь l=L/n - среднюю длину отрезков. Находишь p=min(l-A, B-l) - максимальное отклонение от среднего, которое ты можешь себе позволить с этим алгоритмом. Генерируешь отрезки парами с длиной l±p*0.95ⁿ. Константу подбираешь по вкусу, с нечётным количеством отрезков один отрезок остаётся длиной l.