public WithdrawCassette(BanknoteFaceValue faceValue, int capacity, int banknotesQuantity) { if (capacity <= 0) { throw new ArgumentException("Ёмкость кассеты не может быть пустой"); } if (banknotesQuantity <= 0) { throw new ArgumentException("Кассета не может быть пустой"); } if (banknotesQuantity > capacity) { throw new ArgumentException($"Число банкнот в кассете не может превышать {capacity}"); } this.faceValue = faceValue; this.capacity = capacity; BanknotesQuantity = banknotesQuantity; }
private WithdrawCassette GetWithdrawCassetteByFaceValue(BanknoteFaceValue faceValue) { return(withdrawCassettes.Where(c => c.faceValue.Equals(faceValue)).First()); }
public Dictionary <BanknoteFaceValue, int> GetAvailableBanknotes(int withdrawalAmount, BanknoteFaceValue desiredFaceValue) { Dictionary <BanknoteFaceValue, int> banknotes = new Dictionary <BanknoteFaceValue, int>(); BanknoteFaceValue[] faceValues = (BanknoteFaceValue[])Enum.GetValues(typeof(BanknoteFaceValue)); Array.Reverse(faceValues); int desiredFaceValueIndex = Array.IndexOf(faceValues, desiredFaceValue); for (int i = desiredFaceValueIndex; i < faceValues.Length; i++) { banknotes.Clear(); int currentWithdrawalAmount = withdrawalAmount; for (int j = i; j < faceValues.Length; j++) { int banknotesQuantity = currentWithdrawalAmount / (int)faceValues[j]; int faceValueBanknotesQuantity = GetWithdrawBanknotesQuantityByFaceValue(faceValues[j]); if (banknotesQuantity > faceValueBanknotesQuantity) { banknotesQuantity = faceValueBanknotesQuantity; } currentWithdrawalAmount -= (int)faceValues[j] * banknotesQuantity; banknotes[faceValues[j]] = banknotesQuantity; } if (currentWithdrawalAmount == 0) { return(banknotes); } } banknotes.Clear(); return(banknotes); }
public int GetWithdrawBanknotesQuantityByFaceValue(BanknoteFaceValue faceValue) { return(withdrawCassettes.Where(c => c.faceValue.Equals(faceValue)).Select(c => c.BanknotesQuantity).First()); }