Имя: Пароль:
LIFE
 
OFF: Разбить число на 10 неравных частей
,
0 Маленький Вопросик
 
19.06.17
16:16
Товарищи, подскажите алгоритм, чтобы разбить число (например 1000) на несколько неравных частей, например 17

Спасибо
1 Лефмихалыч
 
19.06.17
16:16
%
*
-
=
это все, что нужно
2 Лефмихалыч
 
19.06.17
16:17
когда собеседование?
3 Fragster
 
гуру
19.06.17
16:18
делишь нацело на 17, потом попарно к каждой части прибавляешь 1 и -1, 2 и -2 и т.д. к последней части с "+" еще привинчиваешь остаток
4 Fragster
 
гуру
19.06.17
16:18
ну, или берешь части от 1 до 16 и потом остальное как 17 часть....
5 Fragster
 
гуру
19.06.17
16:19
16 раз отнимаешь рандомное число, проверяя, не было ли уже такого числа и не получится ли в результате число, которое уже было.
6 Fragster
 
гуру
19.06.17
16:20
находишь сумму чисел от 1 до 17, делишь на это число, потом результат умножаешь на 1, 2, 3 и т.п.
7 Fragster
 
гуру
19.06.17
16:21
а сколько способов нужно на зачет?
8 Timon1405
 
19.06.17
16:21
(7) 10 или 17 неравных способов
9 Лефмихалыч
 
19.06.17
16:21
(5) просто рандомное надо генерить в диапазоне от 1 до Х/17
10 Йохохо
 
19.06.17
16:23
(6) корень 17 степени и минимальное не занятое большее целое. Любая монотонная ункция, линия от 1 до 1000 по У для от 1 по 17 по Х
11 Fragster
 
гуру
19.06.17
16:25
в (4) части = числа
12 Йохохо
 
19.06.17
16:25
(10) ошибка, но понятно с учетом (6), надо сумму вычесь
13 Михаил Козлов
 
19.06.17
16:25
Пусть Xi - i-тое число. Тогда нужно найти все решения системы:
СУММА(Xi) = 1000
Xi<=Xi-1
Xi>=0
14 Fragster
 
гуру
19.06.17
16:26
вообще профессия программиста в том и состоит, чтобы разбить задачу на элементарные подзадачи
15 Лефмихалыч
 
19.06.17
16:26
(13) Xi<=Xi-1
так не бывает
16 Лефмихалыч
 
19.06.17
16:27
при Xi>=0
17 Timon1405
 
19.06.17
16:27
вопрос на пятерку: а сколькими способами с точностью до перестановок это можно сделать
18 Лефмихалыч
 
19.06.17
16:28
да, вот - правильная картинка по этому поводу
19 Fragster
 
гуру
19.06.17
16:28
(17) больше 1000 :)
20 Fragster
 
гуру
19.06.17
16:29
может больше 1000000, хз. тут математик нужен.
21 Fragster
 
гуру
19.06.17
16:30
вот еще хороший вопрос: почему в теме 10, а в (0) - 17?
22 Михаил Козлов
 
19.06.17
16:30
(15) Виноват: Xi<=X(i+1)-1
(17) Если пятерка тыр, то готов.
23 Timon1405
 
19.06.17
16:32
(20) согласен) вопрос к программистам мы решили, а к математикам пофиг) аминь.
*насколько я помню вопрос про количество разбиений действительно довольно сложный
24 Дарлок
 
19.06.17
16:32
явно кто-то слишком много смотрел фильм "Человек, который познал бесконечность"
25 polosov
 
19.06.17
16:34
26 polosov
 
19.06.17
16:36
27 Garykom
 
гуру
19.06.17
16:41
предлагаю через пропорцию...
1/17
2/17
3/17
...
9/17
+
0.5
28 Garykom
 
гуру
19.06.17
16:42
(27) сорри
8/17
+
0.5
29 Garykom
 
гуру
19.06.17
16:44
(28) хотя не так, последнее число берем вычтя все предыдущие
30 Garykom
 
гуру
19.06.17
16:45
(26) Это слишком просто, "взять типовое решение" ))
31 Йохохо
 
19.06.17
16:50
(17) по индукции не очень и сложно
32 Tatitutu
 
19.06.17
16:55
Рез=0;
    Итог=1000;
    Шаг=1;
    КолвоЧастей=17;
    для сч =Шаг по КолвоЧастей+2 цикл        
        Рез=Рез+Сч;
    КонецЦикла;
    
    Рез=0;
    Если Рез <= Итог Тогда
        
        для сч =Шаг по КолвоЧастей-1 цикл        
            Сообщить(Сч);
            Рез=Рез+Сч;
        КонецЦикла;
        Сообщить(Итог-Рез);         
    КонецЕсли;  


РЕЗУЛЬТАТ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
864
33 Timon1405
 
19.06.17
16:55
(31) по индукции от чего? условие что части должны быть неравны(читай попарно неравны) вашу индукцию поломает на корню
34 Йохохо
 
19.06.17
16:57
(33) база Сумма(1..17), потом + 1
35 Serg_1960
 
19.06.17
17:00
(0) Погугли на Мисте "распределить пропорционально". Я где-там давал алгоритм, учитывающий набегающую ошибку округление при делении на пропорции.
36 Йохохо
 
19.06.17
17:02
(34) пфф, так это вообще школьная формула)
37 Timon1405
 
19.06.17
17:03
(34) ничего не понятно. база: сумма (1..16)+864 - так?
Какое предположение индукции?
какой шаг?
38 Михаил Козлов
 
19.06.17
17:12
Из википедии:
Количество разбиений натурального числа n на k слагаемых удовлетворяет рекуррентной формуле:

P(n,k)=P(n?1,k?1)+P(n?k,k)
с начальными значениями:
P(i,i) = 1 ? i ? N
P(i,1) = 1 ? i ? N
P(i,j) = 0 ? j > i.
39 Timon1405
 
19.06.17
17:14
(38) не вижу условия различности слагаемых
40 Михаил Козлов
 
19.06.17
17:14
Что-то криво вышло:
P(n,k)=P(n-1,k-1)+P(n-k,k)
с начальными значениями:
P(i,i) = 1 для натурального i
P(i,1) = 1 для натурального i
P(i,j) = 0 для j>i.
41 Михаил Козлов
 
19.06.17
17:16
(39) Согласен, поторопился. Но предложение (22) остается в силе.
42 Winnie Buh
 
19.06.17
17:17
(0) задачка из учебника какого класса и по какому предмету?
43 polosov
 
19.06.17
17:42
(42) Тритий класс церковно-приходской же.
44 Маленький Вопросик
 
19.06.17
18:05
товарищи, спасибо!
В итоге, какая функция?
45 lodger
 
19.06.17
18:17
(44) Массив = РазбитьЧислоНаНеравныеЧасти(Х,У)
46 mehfk
 
19.06.17
18:25
Такой код должен подойти.

Запрос = Новый Запрос("ВЫБРАТЬ ССЫЛКА из Справоник.СотрудникиОрганизаци Где Где ДатаУвольнения = Датавремя(1,1,1) И Наименование Подобно ""%МаленькийВопросик%""");

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;

Выборка = Результат.Выбарть();

Пока Выборка.Следующий() Цикл
Док = Документы.УвольнениеИзОрганизаций.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Организация = Выборка.Организация;

НоваяСтрока = Док.СотрудникиОрганизации.Добавить();
НоваяСтрока.Сотрудник = Выборка.Ссылка;
НоваяСтрока.ФизЛицо = НоваяСтрока.Сотрудник.ФизЛицо;
НоваяСтрока.ПричинаУвольнения = Справочники.ПричиныУвольнения.НайтиПоНаименованию("п. 3 ч. 1 ст. 81");
Док.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
47 Dmitry77
 
19.06.17
19:05
самое простое
послчисло = 1000;
для и = 1 по 17-1 цикл //вместо 17 подставьте ваше число

сообщить (и);
послчисло - послчисло - и;

конеццикла;
сообщить (послчисло);
48 Dmitry77
 
19.06.17
19:06
(47) послчисло = послчисло - и;