Требуется написать класс наследник DispenseAlgorithm, реализующий алгоритм расчета сдачи обеспечивающий равномерное расходование номиналов.
public abstract class DispenseAlgorithm
{
public abstract Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ);
}
public class CassetteData
{
public int UID { get; set; }
public int Nominal { get; set; }
public int Count { get; set; }
public CassetteData() { }
}
Класс CassetteData – предоствляет информацию о наборе купюр определенного номила имеющуюся в данный момент времени, где Nominal – значени номинала купюры , а Count – их текушее кол-во, UID – уникальны идетификатор данного набора.
В метод CalculateDispense реализуемого класса передается информация о доступных на данный момент наборах купур (CassetteData{] data) и сумма(int summ) которую нужно выдать в качестве сдачи. Метод должен вернуть объект Dictionary<int, int> где ключ — уникальный идентификатор набора купюр, а значение – колво купюр данного набора требуемое к выдачи.
Желаемый результат: купюры выдаются таким образом, чтобы они заканчивались в как можно более равномерно на протежении нескольких сессий выдачи сдачи.
Пример:
Имеются наоборы:автор
1 10 руб 100 купюр
2 50 руб 100 купюр
3 100 руб 100 купюр
Нужно выдать 800 рублей.
Идеальный результат:автор
1 5 штук
2 5 штук
3 5 штук
Т.е. 800 = 10 * 5 + 50 * 5 + 100 * 5
Маложелательный результат:автор
1 0 купюр
2 0 купюр
3 8 купюр
Т.е. 800 = 10 * 0 + 50 * 0 + 100 * 8