
[Ruby rekurencyjne rozwiązanie] Problem wydawania reszty (Problem plecakowy)
[code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1] def change_money(amount, denominations, denominations_result = []) denomination = denominations.shift denominations_result « amount / denomination amount %= denomination puts denominations_result.inspect change_money(amount, denominations, denominations_result) unless denominations.empty? end change_money(1984, denominations) [/code] Output: [code=plain] [9] [9, 1] [9, 1, 1] [9, 1, 1, 1] [9, 1, 1, 1, 1] [9, 1, 1, 1, 1, 0] [9, 1, 1, 1, 1, 0, 2] [9, 1, 1, 1, 1, 0, 2, 0] [/code]
[code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1]
def change_money(amount, denominations, denominations_result = []) denomination = denominations.shift denominations_result « amount / denomination amount %= denomination
puts denominations_result.inspect
change_money(amount, denominations, denominations_result) unless denominations.empty? end
change_money(1984, denominations) [/code]
Output:
[code=plain] [9] [9, 1] [9, 1, 1] [9, 1, 1, 1] [9, 1, 1, 1, 1] [9, 1, 1, 1, 1, 0] [9, 1, 1, 1, 1, 0, 2] [9, 1, 1, 1, 1, 0, 2, 0] [/code]
Solution with Hash: [code=ruby] denominations = [200, 100, 50, 20, 10, 5, 2, 1]
def change_money_hash(amount, denominations, denominations_result = {}) denomination = denominations.shift denominations_result[denomination] = amount / denomination
if denominations.empty? denominations_result else amount %= denomination change_money_hash(amount, denominations, denominations_result) end end
puts change_money_hash(1984, denominations) // output // {200=>9, 100=>1, 50=>1, 20=>1, 10=>1, 5=>0, 2=>2, 1=>0} [/code]
