取余测试题一道

取余测试题一道

取一个任意小于1美元的金额,然后计算可以换成最少多少枚硬币。
硬币有1美分、5美分、10美分、25美分4种。
1美元等于100美分。
举例来说,0.76美元换算结果应该是3枚25美分,
76枚一美分,2枚25美分+2枚10美分+1枚5美分+1枚一美分这样的结果都是不符合要求的。

大伙都做做看,怎么样做,怎么最得最简单最高效。
while True:
    s=float(raw_input("please input numbers(<1))"))
    if s<1:
        s=int(s*100)
        print "%d个美分"%(s/1)
        print "%d个5美分"%(s/5)
        print "%d个10美分"%(s/10)
        print "%d个25美分"%(s/25)
        break
#-*-coding=gbk
def yuan(s):
    if s<100:
        print "%d个美分"%(s/1)
        print "%d个5美分"%(s/5)
        print "%d个10美分"%(s/10)
        print "%d个25美分"%(s/25)
    else:
        print '输入错误!不要超出范围<100美分'
    return s
try:
    yuan(int(raw_input('input numbers,please(<100美分):')))
except ValueError,e:
        print 'ERROR 值错误%s'%e

贪心法.


QUOTE:
原帖由 caesarok 于 2009-2-16 15:54 发表
#-*-coding=gbk
def yuan(s):
    if s

return s是否多余的
“贪心法”能求出最优解么?
#!/usr/bin/python

a=(0,25,10,5,1)
b=[0,0,0,0,0]
c=[0,0,0,0,0]
s=int(raw_input("please input numbers(<1))"))
if s < 0:
    print "input error"
else:
    b[0]=s
    for i in range(1,5):
        b=b[i-1]%a
        c=(b[i-1]-b)/a
        print a, 'need  ', c


QUOTE:
原帖由 小草_cw 于 2009-2-17 10:52 发表
#!/usr/bin/python

a=(0,25,10,5,1)
b=[0,0,0,0,0]
c=[0,0,0,0,0]
s=int(raw_input("please input numbers(

很明显不行啦 b=b[i-1]%a是什么东东啊
b[0]~[3]不都是0   0和tuple不能取模的
还有print a, 'need  ', 这个输出是什么意思
感觉乱七八糟的。。。
#!/usr/bin/python

a=(0,25,10,5,1)
b=[0,0,0,0,0]
c=[0,0,0,0,0]
s=int(raw_input("please input numbers(<1))"))
if s < 0:
    print "input error"
else:
    b[0]=s
    for i in range(1,5):
        b=b[i-1]%a
        c=(b[i-1]-b)/a
        print a, 'need  ', c
#!/usr/bin/python

a=(0,25,10,5,1)
b=[0,0,0,0,0]
c=[0,0,0,0,0]
s=int(raw_input("please input numbers(<1))"))
if s < 0:
    print "input error"
else:
    b[0]=s
    for i in range(1,5):
        b=b[i-1]%a
        c=(b[i-1]-b\[i\])/a
        print a\[i\], 'need  ', c\[i\]