Розглядаємо купюру максимального номіналу і використовуємо її для видачі суми , поки це можливо. Максимум таких купюр можна видати штук. Залишок гривень видаємо іншими номіналами.
Приклад
Суму в гривень можна видати наступним чином: 500 + 200 + 50 + 20.
Реалізація алгоритму
Номінали наявних купюр заносимо в масив .
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];
}Якщо всю суму видано (n = 0), то виводимо знайдену кількість купюр . Інакше виводимо .
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]Якщо всю суму видано (n = 0), то виводимо знайдену кількість купюр . Інакше виводимо .
if n > 0:
print("-1")
else:
print(res)