actually, aside from the duplicates (which are easy to handle), this Python code actually works:
edit:super close!
Code
def change(n):
ret = []
ten_cents = ["2 nickels", "1 dime"]
five_cents = ["1 nickel"]
twofive_cents = ["1 quarter", "2 dimes 1 nickel", "1 dime 3 nickels", "5 nickels"]
if n == 25:
for z in twofive_cents:
ret.append(z)
if n == 10:
for z in ten_cents:
ret.append(z)
if n == 5:
for z in five_cents:
ret.append(z)
if n > 25:
for x in change(n-25):
for y in change(25):
ret.append(x + y)
for z in twofive_cents:
ret.append(x + z)
return ret
if n > 10:
for x in change(n-10):
for y in change(10):
ret.append(x + y)
for z in ten_cents:
ret.append(x + z)
return ret
if n > 5:
for x in change(n-5):
for y in change(5):
ret.append(x + y)
for z in five_cents:
ret.append(x+z)
return ret
else:
return [str(n) + " pennies "]
Code
change for 4: ['4 pennies ']
change for 9: ['4 pennies 5 pennies ', '4 pennies 1 nickel']
change for 10: ['2 nickels', '1 dime', '5 pennies 5 pennies ', '5 pennies 1 nickel']
change for 14: ['4 pennies 2 nickels', '4 pennies 1 dime', '4 pennies 5 pennies 5 pennies ', '4 pennies 5 pennies 1 nickel', '4 pennies 2 nickels', '4 pennies 1 dime']
change for 20: ['2 nickels2 nickels', '2 nickels1 dime', '2 nickels5 pennies 5 pennies ', '2 nickels5 pennies 1 nickel', '2 nickels2 nickels', '2 nickels1 dime', '1 dime2 nickels', '1 dime1 dime', '1 dime5 pennies 5 pennies ', '1 dime5 pennies 1 nickel', '1 dime2 nickels', '1 dime1 dime', '5 pennies 5 pennies 2 nickels', '5 pennies 5 pennies 1 dime', '5 pennies 5 pennies 5 pennies 5 pennies ', '5 pennies 5 pennies 5 pennies 1 nickel', '5 pennies 5 pennies 2 nickels', '5 pennies 5 pennies 1 dime', '5 pennies 1 nickel2 nickels', '5 pennies 1 nickel1 dime', '5 pennies 1 nickel5 pennies 5 pennies ', '5 pennies 1 nickel5 pennies 1 nickel', '5 pennies 1 nickel2 nickels', '5 pennies 1 nickel1 dime']
you'll obviously need to do some deduping, but that part's fairly simple
This post was edited by irimi on Nov 29 2012 05:42pm