Вы пишете программу для автоматического кассового аппарата. Пользователь должен измениться с наименьшим количеством монет. Напишите программу, которая берет сумму (скажем, 1,53 доллара США) и дает изменение в деноминациях США - в данном случае: 1 банкнота достоинством один доллар, 1 x пятьдесят центов и 3 x один цент. Самая короткая программа - победитель. Бонусные баллы за поддержку других валют (например, деноминации Великобритании) и необычных валют (1, 2, 3 цента?)
У вас есть эти номиналы в США: 1 цент, 5 центов, 10 центов, 25 центов, 50 центов, 1 доллар (банкнота или монета), 2 доллара, 5 долларов, 10 долларов.
У вас есть следующие деноминации в Великобритании: 1 пенсов, 2 пенсов, 5 пенсов, 10 пенсов, 20 пенсов, 50 пенсов, £ 1, £ 2, £ 5 (банкнота или монета), £ 10.
Ответы:
Windows PowerShell, 108
111117Самая первая попытка, пока не разгаданная
Замечания по реализации:
Если 3 и 4 не нужно удовлетворять (т.е. я контролирую формат ввода ;-)), тогда достаточно следующей программы (71):
источник
Mathematica: 110 символов
Применение
Или
(6 символов больше) дает
Для других конфессий просто измените таблицу рациональных чисел {10, ...., 5 / 100,1 / 100}
источник
D: 225 символов
Более разборчиво:
Только обрабатывает валюту США. Принимает значение как значение с плавающей запятой в командной строке (должен иметь начальный 0 для значений менее 1 доллара). Не принимает $ как часть значения. Выводит количество каждого типа купюры / монеты в отдельной строке. Например, ввод 1,53 приводит к:
0 20
0 10
0 5
1 1
2 25/100
0 10/100
0 5/100
3 1/100
источник
Mathematica, 51 байт
вход
вывод
Mathematica, 82 байта - С БОНУСОМ -
вход
вывод
источник
Javascript,
8483 байтаИспользует жадный алгоритм.
источник
APL (Дьялог) , 19 байт
Запрашивает желаемое количество, а затем номиналы, выраженные в наименьших единицах (пенни / центы).
Попробуйте онлайн!
⎕CY'dfns'
С о р у рабочее пространствоdfns
⎕ stamps⎕
попросить входы и использовать в качестве аргументов вstamps
функциюисточник