Имя: Пароль:
IT
 
Задача. Теперь по программированию
,
0 1Сергей
 
09.07.18
11:45
Напишите программу, которая определит количество различных комбинаций американских монет(1 цент, 5 центов, 10 центов, 25 и 50 центов), которые могут сложиться в определенную сумму.
1 patapum
 
09.07.18
11:48
(0) анекдот помнишь, "ты поехал отдохнуть, а там станки, станки, станки..."
2 K1RSAN
 
09.07.18
12:15
самое банальное - 4 вложенных цикла)
3 1Сергей
 
09.07.18
12:16
(2) да, вариант. Но, я по старинке - рекурсией решил
4 1Сергей
 
09.07.18
12:19
При сумме 100 центов получается 292 комбинации, если кому интересно :)
5 bolobol
 
09.07.18
12:25
Миста вопрос: "А зачем?"
6 Cool_Profi
 
09.07.18
12:27
Сколько денег?
7 1Сергей
 
09.07.18
12:29
(6) нужно сделать алгоритм который смог бы рассчитать на любую сумму
8 bolobol
 
09.07.18
12:31
(7) Кому нужно? Это не противозаконно?, 1С использовать в личных, не рабочих, целях
9 mistеr
 
09.07.18
12:39
(3) Рекурсия выдала кучу дублей?
10 Fish
 
09.07.18
12:40
(0) А почему именно в американских деньгах?
11 Вафель
 
09.07.18
12:41
Первый вопрос должен быть: Сколько платишь )))
12 1Сергей
 
09.07.18
12:48
(9) эээ... нет. всё вроде предусмотрел
13 1Сергей
 
09.07.18
12:48
(11) За решение задачи для 9-го класса? Не стыдно?
14 1Сергей
 
09.07.18
12:55
Кароче, кому лень думать. Вот моё решение



Перем Номиналы;

Функция КоличествоКомбинаций(Сумма, МонетыМеньшеНоминала = 100) Экспорт
    
    Если Сумма < 5 Тогда
        Возврат 1;
    КонецЕсли;
    
    Результат = 0;
    
    Для Каждого Номинал Из Номиналы Цикл
        
        Если Номинал >= МонетыМеньшеНоминала Тогда
            Продолжить;
        КонецЕсли;
        
        Если Номинал = 1 Тогда
            Результат = Результат + 1;
        Иначе
            
            МаксМонет = Цел(Сумма / Номинал);
            
            Для Идн = 1 по МаксМонет Цикл
                
                Результат = Результат + КоличествоКомбинаций(Сумма - Номинал*Идн, Номинал);
                
            КонецЦикла;
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции


Номиналы = Новый Массив;
Номиналы.Добавить(50);
Номиналы.Добавить(25);
Номиналы.Добавить(10);
Номиналы.Добавить(5);
Номиналы.Добавить(1);
15 Михаил Козлов
 
09.07.18
13:07
Число решений уравнения:
1*Х1+5*Х2+10*Х3+25*Х4+50*Х5 = сумма (в целых неотрицательных).
Равно коэффициенту при Z^сумма в разложении функции (производящая):
1/(1-Z)*1/(1-Z^5)*1/(1-Z^10)*1/(1-Z^25)*1/(1-Z^50)
16 bolobol
 
09.07.18
13:35
(15) Я ничо непонел
17 Ching Wu
 
09.07.18
13:53
(0) про 2 цента забыл
18 mistеr
 
09.07.18
13:53
(11) Был же в (6)
19 1Сергей
 
09.07.18
13:53
(15) всё гениальное простынь
А тоже самое на ЯП слабо?
20 1Сергей
 
09.07.18
13:55
(17) нет сейчас у них двухцентовиков
21 Asmody
 
09.07.18
13:59
(19) Гугли "линейные диофантовы уравнения".
22 Ching Wu
 
09.07.18
14:06
(20) Молодец, прошел тест
23 Михаил Козлов
 
09.07.18
14:12
(16) Характерный случай: биномиальные коэффициенты (C(n,k) - число сочетаний из n по k) - производящая функция (1+Z)^n.
24 1Сергей
 
09.07.18
14:16
теоретики
25 Михаил Козлов
 
09.07.18
14:31
(24) Сколько денег?
26 1Сергей
 
09.07.18
14:36
(25) см (7)
27 Михаил Козлов
 
09.07.18
14:38
(26) Сколько платите за решение?
28 1Сергей
 
09.07.18
14:38
(26) см (13)
29 NSSerg
 
09.07.18
14:42
(28) Если решать с наилучшей сложностью алгоритма - то это  не 9 класс.
30 NSSerg
 
09.07.18
14:48
За О(N^2) решается динамическим программированием.
Для всех значений от 0 до N считаем сколько вариантов набора суммы полтинниками (значение будет один или ноль)
Потом вторым проходом сколько вариантов набора полтинниками и 25-центовиками.
и т.д.
31 Михаил Козлов
 
09.07.18
14:49
(28) Вот Вы в (14) и оформили программно (15).
(30) В (14), как мне кажется, примерно так и сделано.
32 bolobol
 
09.07.18
14:53
(31) Так это про сочетания (уникальные расстановки) в массиве к-элементов из н-возможных элементов.
У нас ни н нет - не ограничено, ни к нет - не ограничено. В н имеется ещё и размер - не в каждую ячейку из к влезет, т.е. - займёт несколько ячеек к, если допустить, что к - это сумма. Или как?
33 bolobol
 
09.07.18
15:00
*Уникальные отсортированные расстановки (111223 = 131122)
*из н-возможных вариантов элементов (1,5,10,25,50)
34 NSSerg
 
09.07.18
15:02
(31) Нет. ДП без массива не получится.
35 NSSerg
 
09.07.18
15:04
+ (34) Хотя похоже да, там тоже N^N, и тоже самое, но без массива.
36 NSSerg
 
09.07.18
15:23
N^2 конечно.
37 NSSerg
 
09.07.18
15:34
Кстати, в (15) - О(N)
38 bolobol
 
09.07.18
16:11
(37) Но задачу это решить не помогает
39 NSSerg
 
09.07.18
16:33
(38) В смысле? Код в (15) Решает задачу за О(N)
Набери миллион копеек, и он решит.
40 NSSerg
 
09.07.18
16:34
Блин, в (14) конечно-же.
41 1Сергей
 
09.07.18
17:46
(39) ващета не решит. Вылетит из-за нехватки памяти :)
42 Михаил Козлов
 
09.07.18
20:54
(41) Неправда Ваша: достаточно храниить только коэффициента разложения в ряд производящей функции, т.е. не более сумма чисел. Многовато, конечно, если сумма - большое число, но в этом случае в (14) будет большой стек (а это тоже память).
43 Михаил Козлов
 
09.07.18
21:02
(42) Более того, если бы трудоемкость (15) была любая степень от LOG(сумма), это было бы ПОЧТИ решением проблемы P=NP, что вряд ли.
44 Михаил Козлов
 
09.07.18
22:29
Позволю себе еще одно замечание: в (21) есть важная, по-моему, наводка: для числа решений линейного диофантова уравнения можно составить реккурентное соотношение, а это путь для его рекурсивного вычисления.
45 PR
 
09.07.18
22:41
(4) А если никому не интересно?
46 1Сергей
 
10.07.18
10:34
(45) те молча проходят мимо