Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def withdraw s
- if s > 0
- check = 0
- #=begin
- #создаём пустой массив размерности размер депозита + 1 на количество
- #купюр
- #=end
- dp = Array.new(@moneyDeposit + 1){Array.new(Banknotes.length + 1) {-1}}
- dp[0][0] = 0
- #проходимся циклом по массиву dp
- (0..(Banknotes.length - 1)).each do |k|
- (0..@moneyDeposit).each do |x|
- #проверяем, участвуют ли купюры с номером k в достижении х
- if dp[x][k] == -1
- next
- end
- #переменная ниже - максимально возможна сумма для выдачи
- check = x
- #берём количество купюр банкноты с номером k
- n = @moneyInside[Banknotes[k]]
- #циклом этой длины вычисляем максимально допустимую сумму
- (0..n).each do |i|
- sum = x + i * Banknotes[k]
- #если временная сумма выше депозита, то мы пропускаем шаг
- if sum > s
- next
- end
- #=begin
- #иначе элементу с этим номером присваиваем значение
- #количества купюр
- #=end
- dp[sum][k + 1] = i
- end
- end
- end
- #инициализируем конечную проверку
- final = check
- #создаём массив-ответ
- ans = Array.new(Banknotes.length + 1){0}
- #=begin
- #пройдёмся по массиву банкнот от последней до 2-й и переприсвоим
- #соответствующим ячейкам массива-ответа значения из dp
- #=end
- (Banknotes.length).downto (1) do |i|
- ans[i - 1] = dp[check][i]
- check -= ans[i - 1] * Banknotes[i - 1]
- end
- hsrez = {}
- #=begin
- #в хэш-результат помещаем все купюры, которые используются при достижении
- #максимально возможной суммы
- #=end
- ans.each_with_index do |amnt, i|
- if Banknotes[i] && amnt>0
- hsrez[Banknotes[i]] = amnt
- end
- end
- if final < s
- puts "nil" #вот тут я не уверен ибо нил оно выдаёт в виде пустой строки
- else
- puts "Следующими купюрами будет выданы средства в размере #{final}:"
- puts hsrez
- hsrez
- end
- else
- puts "Выдача каких-либо средств невозможна"
- Hash.new
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement