yuin #74(2007/07/03 07:22 GMT) [ Python ] Rating0/0=0.00
pay(147, {1=> 2, 5=>300, 10=> 4, 100=> 3}) => {5=>299, 1=>2, 100=>2} これあってますよね。 たぶん#73の方と同じ疑問点なのだと思いますが、 5 * 299 + 1 * 2 + 100 * 2 = 1697 1697 - 147 = 1550 でおつりは500 * 3, 50 * 1。確かに一番減ります。こんなお金の出され方したら怒りますけど(笑 Pythonでも同じアルゴリズムで書いてみました。
1 2 3 4 5 6 7 8 9
from operator import * def pay(m, w): r = dict() m = sum((k*w[k] for k in w)) - m if m < 0: raise "money" for c in (500,100,50,10,5,1): r[c] = w.get(c, 0) - m / c m %= c return dict(((k,v) for k,v in r.items() if v > 0))
Rating0/0=0.00-0+
1 reply [ reply ]
yuin
#74()
[
Python
]
Rating0/0=0.00
pay(147, {1=> 2, 5=>300, 10=> 4, 100=> 3}) => {5=>299, 1=>2, 100=>2} これあってますよね。 たぶん#73の方と同じ疑問点なのだと思いますが、 5 * 299 + 1 * 2 + 100 * 2 = 1697 1697 - 147 = 1550 でおつりは500 * 3, 50 * 1。確かに一番減ります。こんなお金の出され方したら怒りますけど(笑 Pythonでも同じアルゴリズムで書いてみました。Rating0/0=0.00-0+