Advertisement
Leviathaven

Untitled

Dec 13th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.91 KB | None | 0 0
  1.   def withdraw s
  2.     if s > 0
  3.       check = 0
  4.       #=begin
  5.       #создаём пустой массив размерности размер депозита + 1 на количество
  6.       #купюр
  7.       #=end
  8.       dp = Array.new(@moneyDeposit + 1){Array.new(Banknotes.length + 1) {-1}}
  9.       dp[0][0] = 0
  10.       #проходимся циклом по массиву dp
  11.       (0..(Banknotes.length - 1)).each do |k|
  12.         (0..@moneyDeposit).each do |x|
  13.           #проверяем, участвуют ли купюры с номером k в достижении х
  14.           if dp[x][k] == -1
  15.             next
  16.           end
  17.           #переменная ниже - максимально возможна сумма для выдачи
  18.           check = x
  19.           #берём количество купюр банкноты с номером k
  20.           n = @moneyInside[Banknotes[k]]
  21.           #циклом этой длины вычисляем максимально допустимую сумму
  22.           (0..n).each do |i|
  23.             sum = x + i * Banknotes[k]
  24.             #если временная сумма выше депозита, то мы пропускаем шаг
  25.             if sum > s
  26.               next
  27.             end
  28.             #=begin
  29.             #иначе элементу с этим номером присваиваем значение
  30.             #количества купюр
  31.             #=end
  32.             dp[sum][k + 1] = i
  33.           end
  34.         end
  35.       end
  36.       #инициализируем конечную проверку
  37.       final = check
  38.       #создаём массив-ответ
  39.       ans = Array.new(Banknotes.length + 1){0}
  40.       #=begin
  41.       #пройдёмся по массиву банкнот от последней до 2-й и переприсвоим
  42.       #соответствующим ячейкам массива-ответа значения из dp
  43.       #=end
  44.       (Banknotes.length).downto (1) do |i|
  45.         ans[i - 1] = dp[check][i]
  46.         check -= ans[i - 1] * Banknotes[i - 1]
  47.       end
  48.       hsrez = {}
  49.       #=begin
  50.       #в хэш-результат помещаем все купюры, которые используются при достижении
  51.       #максимально возможной суммы
  52.       #=end
  53.       ans.each_with_index do |amnt, i|
  54.         if Banknotes[i] && amnt>0
  55.           hsrez[Banknotes[i]] = amnt
  56.         end
  57.       end
  58.       if final < s
  59.         puts "nil" #вот тут я не уверен ибо нил оно выдаёт в виде пустой строки
  60.       else
  61.       puts "Следующими купюрами будет выданы средства в размере #{final}:"
  62.       puts hsrez
  63.       hsrez
  64.       end
  65.     else
  66.       puts "Выдача каких-либо средств невозможна"
  67.       Hash.new
  68.     end
  69.   end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement