So, as subject says, it is atm code that should return required sum using minimum amount of 100, 50 and 20 banknotes.
Just to simplify, the input is always positive; also the input is always divisible using mentioned banknotes nominals.
My question is not Python-specific (I know that my knowledge is weak, but I will learn it better soon), it is rather looking for proper algorithm. As far as I can see, looping is not proper way here. For example, it works fine with 290 input value; but in case of 110 it takes one 100 banknote, then 10 is left which doesn't have appropriate banknote; so it should skip 100 and return one 50 plus three 20.
Please advise if you have proper algorithm idea.
Code: Select all
def atm(value): rest = value result = '' var100 = 0 var50 = 0 var20 = 0 if (rest - 100 >= 0): while True: rest = rest - 100 if (rest >= 0): var100 = var100 + 1 else: rest = rest + 100 break if (rest - 50 >= 0): while True: rest = rest - 50 if (rest >= 0): var50 = var50 + 1 else: rest = rest + 50 break if (rest - 20 >= 0): while True: rest = rest - 20 if (rest >= 0): var20 = var20 + 1 else: rest = rest + 20 break result = str(var100) + ' ' + str(var50) + ' ' + str(var20) return result print (atm(290))