|
Алгоритм разбиения числа на 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, все доли взаимно не равны." |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |