Имя: Пароль:
IT
 
Алгоритм разбиения числа на N неравных частей
🠗 (Волшебник 01.11.2017 10:20)
,
0 Маленький Вопросик
 
01.11.17
10:17
Товарищи, подскажите алгоритм разбиения числа на N неравных частей

огромное спасибо!
1 Fragster
 
гуру
01.11.17
10:19
делим на n равных, последнюю увеличиваем на 1%, предпоследнюю соответственно уменьшаем.
2 Волшебник
 
модератор
01.11.17
10:20
Вам больше делать нехер?
3 vova1122
 
01.11.17
10:20
Это как должно быть? Например число 50 разбить на 4+17+14+9+6.
Сами чмсла прудумывать случайным образом или как?
4 Fragster
 
гуру
01.11.17
10:20
да это вопрос на собеседовании
5 assasu
 
01.11.17
10:20
http://www.yaplakal.com/forum2/topic1684032.html

просто оставлю это тут
6 Ненавижу 1С
 
гуру
01.11.17
10:23
используйте, например
1/15 2/15 3/15 4/15 5/15
7 aka AMIGO
 
01.11.17
10:24
Каждый остаток делить на 2. Вот и будет бездна неравных чисел.
Применение таких чисел мне неизвестно..
Просто забивать голову. Или поупражняться в числах, и благополучно забыть.
8 Маленький Вопросик
 
01.11.17
10:55
(1) +1
9 Sapiens_bru
 
01.11.17
16:25
(0) Доли должны получится целыми числами?
Если нет:
Делим число Х на 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 Sapiens_bru
 
01.11.17
16:27
(9)очепятка. Строку
"Их сумма даст искомое N, все доли взаимно не равны."
читать как
"Их сумма даст исходное X, все доли взаимно не равны."
2 + 2 = 3.9999999999999999999999999999999...