Задача взята с сайта e-olymp.com.
Задача
Чистые компакт-диски продают в трёх видах упаковок. Упаковка из 100 дисков стоит 100 грн., из 20 дисков — 30 грн., а один диск стоит 2 грн. Какую минимальную сумму нужно истратить для покупки [latex] n [/latex] таких дисков?
Входные данные
Количество дисков [latex] n (n ≤ 1000)[/latex].
Выходные данные
Вывести минимальную сумму в гривнах для покупки [latex] n [/latex] дисков.
Тесты
№ | Входные данные (число [latex] n [/latex]) | Выходные данные (минимальная сумма, грн.) |
---|---|---|
1. | 17 | 30 |
2. | 7 | 14 |
3. | 123 | 136 |
4. | 24 | 38 |
5. | 173 | 200 |
6. | 108 | 116 |
7. | 136 | 160 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Test { static function main() { var n = 173; var price = 0; if (n % 100 > 65) price = Std.int(n + (100 - n % 100)) else price = Std.int(n / 100) * 100; if (n % 100 > 65) n = 0 else n = n % 100; if (n % 20 > 15) price = price + (Std.int((n + (20 - 16 % 20)) / 20) * 30) else price = price + Std.int(n / 20) * 30; if (n % 20 > 15) n = 0 else n = n % 20; trace(price + n * 2); } } |
Решение
Для решения этой задачи мы должны вывести минимальную сумму для покупки[latex] n [/latex] дисков. Следует отметить, что для заданного числа [latex] n [/latex] дисков нам надо определить минимальную сумму, при этом мы можем покупать упаковку с большем количеством дисков, чем нужное нам [latex] n [/latex], если при этом итоговая сумма покупки получится меньше. Таким образом, мы аналитически определили, что если [latex]n\mod100 > 65[/latex] то экономней будет приобрести большую упаковку на 100 дисков за 100 грн., чем несколько более маленьких упаковок по 30 грн., и соответственно при [latex]n\mod20 > 15 [/latex] лучше приобрести одну упаковку на 20 дисков за 30 грн., чем по одному за 2 грн.
Оригинальное решение: cpp.mazurok.com.
Рабочий код для тестирования на try.haxe.org: Try Haxe !
- e-olymp 107. Компакт-диски - 23.06.2017
- e-olymp 128. Счастливые билеты - 22.06.2017
- e-olimp 248. Юный садовод - 22.06.2017
Зачем так сложно? Достаточно двух проверок: