Вход | Регистрация

Информационные технологии ::

Метки: 

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

↓ [Волшебник, 01.11.17 - 10:20]
Я
   МаленькийВопросик
 
01.11.17 - 10:17
Товарищи, подскажите алгоритм разбиения числа на N неравных частей

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

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


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует