|
Алгоритм разбиения числа на 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
|
просто оставлю это тут
|
|
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, все доли взаимно не равны."
|
|