Алгоритм разбиения числа на N неравных частей #807724


#0 by МаленькийВопросик
Товарищи, подскажите алгоритм разбиения числа на N неравных частей огромное спасибо!
#1 by Fragster
делим на n равных, последнюю увеличиваем на 1%, предпоследнюю соответственно уменьшаем.
#2 by Волшебник
Вам больше делать нехер?
#3 by vova1122
Это как должно быть? Например число 50 разбить на 4+17+14+9+6. Сами чмсла прудумывать случайным образом или как?
#4 by Fragster
да это вопрос на собеседовании
#5 by assasu
просто оставлю это тут
#6 by Ненавижу 1С
используйте, например 1/15 2/15 3/15 4/15 5/15
#7 by aka AMIGO
Каждый остаток делить на 2. Вот и будет бездна неравных чисел. Применение таких чисел мне неизвестно.. Просто забивать голову. Или поупражняться в числах, и благополучно забыть.
#8 by МаленькийВопросик
+1
#9 by Sapiens_bru
Доли должны получится целыми числами? Если нет: Делим число Х на N взаимно неравных долей. Чтобы доли были взаимно неравны возьмем любой конечный ряд в котором члены не равны друг другу. Например арифметическую последовательность от 1 до N. Это будут "веса" наших долей в итоговой сумме. Сумма ряда от 1 до N равна (N+1)*N/2 Первая доля Х*1/((N+1)*N/2) Вторая доля Х*2/((N+1)*N/2) Третья доля Х*3/((N+1)*N/2) ... Последняя   Х*N/((N+1)*N/2) Их сумма даст искомое N, все доли взаимно не равны. При расчета алгоритма на компе нужно учитывать, что деление целых чисел идёт с округлением, поэтому последний член ряда нужно вычислять не по формуле, а как остаток от  исходного числа после вычитания всех чисел ряда кроме последнего. Если итоговые числа должны быть целыми. Проверяем что X больше или равно (N+1)*N/2 , иначе предупреждаем что разбиение невозможно, так как арифметическая последовательность с шагом 1 это самый компактный способ размещения РАЗНЫХ целых чисел. Если Ч достаточно большое  - считаем все доли как 1, 2, 3, и так далее до N-1 , а последний член ряда вычисляем отниманием от числа Х числа ((N+1)*N/2-(N-1))
#10 by Sapiens_bru
очепятка. Строку "Их сумма даст искомое N, все доли взаимно не равны." читать как "Их сумма даст исходное X, все доли взаимно не равны."
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям