Разбор
Берем купюру максимального номинала и используем ее для выдачи суммы пока это возможно. Максимум таких купюр можно выдать штук. Остаток гривен выдаем остальными номиналами.
Пример
Сумму в гривен можно выдать следующим образом: .
Реализация алгоритма
Номиналы имеющихся купюр занесем в массив .
int c[6] = { 500, 200, 100, 50, 20, 10 };
Читаем входную сумму .
scanf("%d", &n);
В переменной подсчитываем количество выданных купюр.
res = 0;
Перебираем имеющиеся в наличии шесть номиналов купюр. Для выдачи суммы можно использовать максимум купюр номиналом . После использования номинала оставшаяся сумма равна .
for (i = 0; i < 6; i++) { res += n / c[i]; n = n % c[i]; }
Если вся сумма выдана , то выводим найденное количество купюр . Иначе выводим .
if (n > 0) printf("-1\n"); else printf("%d\n", res);
Java реализация
import java.util.*; public class Main { static int c[] = {500, 200, 100, 50, 20, 10}; public static void main(String[] args) { Scanner con = new Scanner(System.in); int n = con.nextInt(); int res = 0; for(int i = 0; i < 6; i++) { res += n / c[i]; n = n % c[i]; } if (n > 0) System.out.println("-1"); else System.out.println(res); con.close(); } }
Python реализация
Читаем входную сумму .
n = int(input())
В переменной подсчитываем количество выданных купюр.
res = 0
Номиналы имеющихся купюр занесем в список .
c = [500, 200, 100, 50, 20, 10]
Перебираем имеющиеся в наличии шесть номиналов купюр. Для выдачи суммы можно использовать максимум купюр номиналом . После использования номинала оставшаяся сумма равна .
for i in range(6): res += n // c[i] n %= c[i]
Если вся сумма выдана , то выводим найденное количество купюр . Иначе выводим .
if n > 0: print("-1") else: print(res)