Advertisement
shubhamgoyal

ExchangeNotes.py

Aug 19th, 2014
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.68 KB | None | 0 0
  1. #!/usr/local/bin/python2.7
  2. table = {}
  3.  
  4. def findMin(num10, num5, num2, amount):
  5.     # print (amount, num10, num5, num2)
  6.     value10 = 99999999
  7.     value5 = 999999999
  8.     value2 = 999999999
  9.     if (num10, num5, num2, amount) in table:
  10.         return table[(num10, num5, num2, amount)]
  11.     elif (amount <= num10 * 10) and (amount <= num5 * 5) and (amount <= num2 * 2) and ((-1, -1, -1, amount) in table):
  12.         return table[(-1, -1, -1, amount)]
  13.     elif amount == 0:
  14.         table[(num10, num5, num2, amount)] = (0, 0, 0, 0)
  15.         return table[(num10, num5, num2, amount)]
  16.     elif num10 + num5 + num2 == 0:
  17.         table[(num10, num5, num2, amount)] = (99999999, 50, 100, 500)
  18.         return table[(num10, num5, num2, amount)]
  19.     elif amount < 2:
  20.         table[(num10, num5, num2, amount)] = (99999999, 0, 0, 0)
  21.         return table[(num10, num5, num2, amount)]
  22.     else:
  23.         if (amount >= 2) and (num2 >= 1):
  24.             value2 = 1 + (findMin(num10, num5, num2 - 1, amount - 2))[0]
  25.         if (amount >= 5) and (num5 >= 1):
  26.             value5 = 1 + (findMin(num10, num5 - 1, num2, amount - 5))[0]
  27.         if (amount >= 10) and (num10 >= 1):
  28.             value10 = 1 + (findMin(num10 - 1, num5, num2, amount - 10))[0]
  29.         if (value10 <= value5) and (value10 <= value2) and (amount >= 10) and (num10 >= 1):
  30.             table[(num10, num5, num2, amount)] = (value10, 1 + table[(num10 - 1, num5, num2, amount - 10)][1], table[(num10 - 1, num5, num2, amount - 10)][2], table[(num10 - 1, num5, num2, amount - 10)][3])
  31.         elif (value5 <= value2) and (amount >= 5) and (num5 >= 1):
  32.             table[(num10, num5, num2, amount)] = (value5, table[(num10, num5 - 1, num2, amount - 5)][1], 1 + table[(num10, num5 - 1, num2, amount - 5)][2], table[(num10, num5 - 1, num2, amount - 5)][3])
  33.         elif (amount >= 2) and (num2 >= 1):
  34.             table[(num10, num5, num2, amount)] = (value2, table[(num10, num5, num2 - 1, amount - 2)][1], table[(num10, num5, num2 - 1, amount - 2)][2], 1 + table[(num10, num5, num2 - 1, amount - 2)][3])
  35.         if (amount < num10 * 10) and (amount < num5 * 5) and (amount < num2 * 2):
  36.             table[(-1 -1, -1, amount)] = table[(num10, num5, num2, amount)]
  37.         return table[(num10, num5, num2, amount)]
  38.  
  39. def ExchangeNotes(amount):
  40.     if amount > (50 * 10 + 100 * 5 + 500 * 2):
  41.         print "'50xS$10, 100xS$5, 500xS$2, remainder: S$" + str(amount - (50 * 10 + 100 * 5 + 500 * 2)) + "'"
  42.     else:
  43.         answer = findMin(50, 100, 500, amount)
  44.         # print answer
  45.         is10NoteNeeded = False
  46.         is5NoteNeeded = False
  47.         is2NoteNeeded = False
  48.         if answer[1] > 0:
  49.             is10NoteNeeded = True
  50.         if answer[2] > 0:
  51.             is5NoteNeeded = True
  52.         if answer[3] > 0:
  53.             is2NoteNeeded = True
  54.         answerString = "'"
  55.         if is10NoteNeeded:
  56.             answerString = answerString + str(answer[1]) + "xS$10"
  57.         if is10NoteNeeded and is5NoteNeeded:
  58.             answerString = answerString + ", "
  59.         if is5NoteNeeded:
  60.             answerString = answerString + str(answer[2]) + "xS$5"
  61.         if (is10NoteNeeded and is2NoteNeeded) or (is5NoteNeeded and is2NoteNeeded):
  62.             answerString = answerString + ", "
  63.         if is2NoteNeeded:
  64.              answerString = answerString + str(answer[3]) + "xS$2"
  65.         answerString = answerString + "'"
  66.         if (not is10NoteNeeded) and (not is5NoteNeeded) and (not is2NoteNeeded):
  67.             answerString = answerString + "   #the bank will not give any notes"
  68.         print answerString
  69. #
  70. ExchangeNotes(1000)
  71. ExchangeNotes(888)
  72. ExchangeNotes(88)
  73. ExchangeNotes(4)
  74. ExchangeNotes(7)
  75. ExchangeNotes(5000)
  76. ExchangeNotes(0)
  77. ExchangeNotes(-2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement