Алгоритм выдачи сдачи
От: Darooma Россия  
Дата: 22.08.10 14:11
Оценка:
Требуется написать класс наследник 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.