package com.algos.shortcut; import java.util.Arrays; // В банкомате доступны банкноты различных номиналов, например, [100, 500, 1000]. // Вам необходимо написать программу, которая по заданной сумме определяет минимальное количество банкнот, // необходимое для выдачи этой суммы. Допускается использовать любое количество банкнот каждого номинала. // // Если точно составить требуемую сумму с использованием имеющихся номиналов невозможно, // программа должна вернуть -1. public class Atm { public static void main(String[] args) { int[] banknotes = {100, 500, 1000}; // int[] banknotes = {1000, 100, 500}; // int amount = 1500; int amount = 1803; // int amount = 1800; // int amount = 600; int result = minBanknotes(banknotes, amount); System.out.println(result); } private static int minBanknotes(int[] banknotes, int amount) { Arrays.sort(banknotes); int[] result = new int[banknotes.length]; for (int i = banknotes.length - 1; i >= 0; i--) { if (amount < banknotes[i]) { continue; } result[i] = amount / banknotes[i]; amount = amount % banknotes[i]; } if (amount != 0) { return -1; } return Arrays.stream(result).sum(); } }