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


О жизни... ::

Метки:

OFF: Разбить число на 10 неравных частей

Я
   МаленькийВопросик
 
19.06.17 - 16:16
Товарищи, подскажите алгоритм, чтобы разбить число (например 1000) на несколько неравных частей, например 17

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

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

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

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

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

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

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

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



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