Имя: Пароль:
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, все доли взаимно не равны."
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан