Нет лучшего способа произвести впечатление на девушку, чем великодушный отказ брать сдачу при оплате счёта в кафе. По крайней мере, Макс считает именно так. Для закрепления эффекта Макс также не берёт сдачу при оплате такси. У Макса имеется A купюр по 10 рублей, B купюр по 50 рублей и C купюр по 100 рублей. В кафе Максу и его девушке принесли счёт на сумму N рублей, а проезд в такси стоит M рублей. Помогите Максу узнать, какую наименьшую сумму денег ему придётся потратить, если он будет отказываться от сдачи. Помните, что кафе и такси оплачиваются по отдельности. Входные данные Первая строка содержит целые числа A, B, C (0 ≤ A, B, C ≤ 10) — количество имеющихся у Макса купюр по 10, 50 и 100 рублей соответственно. Вторая строка содержит целые числа N и M (1 ≤ N, M ≤ 600) — сумму в счёте кафе и цену такси соответственно. Выходные данные Выведите одно целое число — минимальное количество рублей, которое потребуется потратить Максу. Если Макс не сможет расплатиться предпочитаемым образом, выведите число -1. Примеры входные данные 3 1 10 490 100 выходные данные 600 входные данные 1 6 2 485 351 выходные данные -1 Примечание В первом примере Макс может заплатить 500 рублей за кафе и 100 рублей за такси.
Ну тип такого int a, b, c; cin >> a >> b >> c; int m, n; cin >> m >> n; // Вовсе не жадный Максим будет действовать по весьма жадному алгоритму // Ведём ту самую в кафе int a1 = a, b1 = b, c1 = c; // Оплата Кафе int sum1 = a1 * 10 + b1 * 50 + c1 * 100; // Сколько всего платить (Сейчас - весь его скарб) while (sum1 >= m + 100 && c1 > 0) { c1--; // Спасаем 100 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } while (sum1 >= m + 50 && b1 > 0) { b1--; // Спасаем 50 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } while (sum1 >= m + 10 && a1 > 0) { a1--; // Спасаем 10 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } if (sum1 < m) { cout << -1; // Максим облажался :( return 0; } // Ведём ту самую в такси int a2 = a - a1, b2 = b - b1, c2 = c - c1; // Оплата Кафе int sum2 = a2 * 10 + b2 * 50 + c2 * 100; // Сколько всего платить (Сейчас - всё, что осталось) while (sum2 >= n + 100 && c2 > 0) { c2--; // Спасаем 100 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } while (sum2 >= n + 50 && b2 > 0) { b2--; // Спасаем 50 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } while (sum2 >= n + 10 && a2 > 0) { a2--; // Спасаем 10 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } if (sum2 < n) { cout << -1; // Максим облажался :( return 0; } cout << sum1 + sum2; return 0; Code int a, b, c; cin >> a >> b >> c; int m, n; cin >> m >> n; // Вовсе не жадный Максим будет действовать по весьма жадному алгоритму // Ведём ту самую в кафе int a1 = a, b1 = b, c1 = c; // Оплата Кафе int sum1 = a1 * 10 + b1 * 50 + c1 * 100; // Сколько всего платить (Сейчас - весь его скарб) while (sum1 >= m + 100 && c1 > 0) { c1--; // Спасаем 100 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } while (sum1 >= m + 50 && b1 > 0) { b1--; // Спасаем 50 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } while (sum1 >= m + 10 && a1 > 0) { a1--; // Спасаем 10 sum1 = a1 * 10 + b1 * 50 + c1 * 100; } if (sum1 < m) { cout << -1; // Максим облажался :( return 0; } // Ведём ту самую в такси int a2 = a - a1, b2 = b - b1, c2 = c - c1; // Оплата Кафе int sum2 = a2 * 10 + b2 * 50 + c2 * 100; // Сколько всего платить (Сейчас - всё, что осталось) while (sum2 >= n + 100 && c2 > 0) { c2--; // Спасаем 100 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } while (sum2 >= n + 50 && b2 > 0) { b2--; // Спасаем 50 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } while (sum2 >= n + 10 && a2 > 0) { a2--; // Спасаем 10 sum2 = a2 * 10 + b2 * 50 + c2 * 100; } if (sum2 < n) { cout << -1; // Максим облажался :( return 0; } cout << sum1 + sum2; return 0;
int main() { int Note10(0), Note50(0), Note100(0), MoneyCoffe(0), MoneyTaxi(0); std::cin >> Note10 >> Note50 >> Note100; std::cin >> MoneyCoffe >> MoneyTaxi; int AllMoney = MoneyCoffe + MoneyTaxi; if(AllMoney > (Note10 * 10 + Note50 * 50 + Note100 * 100)) { std::cout << "-1\n"; system("pause"); return 0; } int HowNotes100 = Note100, HowNotes50 = Note50, HowNotes10 = Note10; int Note100Cof = (HowNotes100 != 0 ? MoneyCoffe > 0 ? (Note100 > MoneyCoffe / 100 ? (MoneyCoffe % 100 < 100 ? Note100 = MoneyCoffe / 100 + 1 : Note100 = MoneyCoffe / 100) : Note100 = Note100, MoneyCoffe -= Note100 * 100, Note100) : 0 : 0), Note50Cof = (HowNotes50 != 0 ? MoneyCoffe > 0 ? (Note50 > MoneyCoffe / 50 ? (MoneyCoffe % 50 < 50 ? Note50 = MoneyCoffe / 50 + 1 : Note50 = MoneyCoffe / 50) : Note50 = Note50, MoneyCoffe -= Note50 * 50, Note50) : 0 : 0), Note10Cof = (HowNotes10 != 0 ? MoneyCoffe > 0 ? (Note10 > MoneyCoffe / 10 ? (MoneyCoffe % 10 < 10 ? Note10 = MoneyCoffe / 10 + 1 : Note10 = MoneyCoffe / 10) : Note10 = Note10, MoneyCoffe -= Note10 * 10, Note10) : 0 : 0); HowNotes100 -= Note100, HowNotes50 -= Note50, HowNotes10 -= Note10; int Note100Tax = (HowNotes100 != 0 ? MoneyTaxi > 0 ? (HowNotes100 > MoneyTaxi / 100 ? (MoneyTaxi % 100 < 100 && MoneyTaxi % 100 != 0 ? Note100 = MoneyTaxi / 100 + 1 : Note100 = MoneyTaxi / 100) : Note100 = Note100, MoneyTaxi -= Note100 * 100, Note100) : 0 : 0), Note50Tax = (HowNotes50 != 0 ? MoneyTaxi > 0 ? (HowNotes50 > MoneyTaxi / 50 ? (MoneyTaxi % 50 < 50 && MoneyTaxi % 50 != 0 ? Note50 = MoneyTaxi / 50 + 1 : Note50 = MoneyTaxi / 50) : Note50 = Note50, MoneyTaxi -= Note50 * 50, Note50) : 0 : 0), Note10Tax = (HowNotes10 != 0 ? MoneyTaxi > 0 ? (HowNotes10 > MoneyTaxi / 10 ? (MoneyTaxi % 10 < 10 && MoneyTaxi % 10 != 0 ? Note10 = MoneyTaxi / 10 + 1 : Note10 = MoneyTaxi / 10) : Note10 = Note10, MoneyTaxi -= Note10 * 10, Note10) : 0 : 0); int ResultMoney = (Note100Cof * 100) + (Note100Tax * 100) + (Note10Cof * 50) + (Note50Tax * 50) + (Note10Tax * 10) + (Note10Cof * 10); std::cout << "ResultMoney: " << ResultMoney << '\n'; system("pause"); } Code int main() { int Note10(0), Note50(0), Note100(0), MoneyCoffe(0), MoneyTaxi(0); std::cin >> Note10 >> Note50 >> Note100; std::cin >> MoneyCoffe >> MoneyTaxi; int AllMoney = MoneyCoffe + MoneyTaxi; if(AllMoney > (Note10 * 10 + Note50 * 50 + Note100 * 100)) { std::cout << "-1\n"; system("pause"); return 0; } int HowNotes100 = Note100, HowNotes50 = Note50, HowNotes10 = Note10; int Note100Cof = (HowNotes100 != 0 ? MoneyCoffe > 0 ? (Note100 > MoneyCoffe / 100 ? (MoneyCoffe % 100 < 100 ? Note100 = MoneyCoffe / 100 + 1 : Note100 = MoneyCoffe / 100) : Note100 = Note100, MoneyCoffe -= Note100 * 100, Note100) : 0 : 0), Note50Cof = (HowNotes50 != 0 ? MoneyCoffe > 0 ? (Note50 > MoneyCoffe / 50 ? (MoneyCoffe % 50 < 50 ? Note50 = MoneyCoffe / 50 + 1 : Note50 = MoneyCoffe / 50) : Note50 = Note50, MoneyCoffe -= Note50 * 50, Note50) : 0 : 0), Note10Cof = (HowNotes10 != 0 ? MoneyCoffe > 0 ? (Note10 > MoneyCoffe / 10 ? (MoneyCoffe % 10 < 10 ? Note10 = MoneyCoffe / 10 + 1 : Note10 = MoneyCoffe / 10) : Note10 = Note10, MoneyCoffe -= Note10 * 10, Note10) : 0 : 0); HowNotes100 -= Note100, HowNotes50 -= Note50, HowNotes10 -= Note10; int Note100Tax = (HowNotes100 != 0 ? MoneyTaxi > 0 ? (HowNotes100 > MoneyTaxi / 100 ? (MoneyTaxi % 100 < 100 && MoneyTaxi % 100 != 0 ? Note100 = MoneyTaxi / 100 + 1 : Note100 = MoneyTaxi / 100) : Note100 = Note100, MoneyTaxi -= Note100 * 100, Note100) : 0 : 0), Note50Tax = (HowNotes50 != 0 ? MoneyTaxi > 0 ? (HowNotes50 > MoneyTaxi / 50 ? (MoneyTaxi % 50 < 50 && MoneyTaxi % 50 != 0 ? Note50 = MoneyTaxi / 50 + 1 : Note50 = MoneyTaxi / 50) : Note50 = Note50, MoneyTaxi -= Note50 * 50, Note50) : 0 : 0), Note10Tax = (HowNotes10 != 0 ? MoneyTaxi > 0 ? (HowNotes10 > MoneyTaxi / 10 ? (MoneyTaxi % 10 < 10 && MoneyTaxi % 10 != 0 ? Note10 = MoneyTaxi / 10 + 1 : Note10 = MoneyTaxi / 10) : Note10 = Note10, MoneyTaxi -= Note10 * 10, Note10) : 0 : 0); int ResultMoney = (Note100Cof * 100) + (Note100Tax * 100) + (Note10Cof * 50) + (Note50Tax * 50) + (Note10Tax * 10) + (Note10Cof * 10); std::cout << "ResultMoney: " << ResultMoney << '\n'; system("pause"); } Поздно, конечно, но очень не обычно сдела. Без циклов и рекурсий.