24小时热门版块排行榜    

查看: 1536  |  回复: 10
本帖产生 2 个 程序强帖 ,点击这里进行查看

wangww2011

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
jjdg(金币+2): 感谢参与 2011-07-27 00:04:41
ben_ladeng: 2011-08-02 08:06:50
也是用递归,先说思路(可能有点笨)
对于n pence来说,如果只用1pence 和2 pence 两种兑换,则有 int(n/2)+1 种方法,写成这种形式
y(1,2;n)=int(n/2)+1
如果再加多些,譬如用1pence, 2 pence 和 5 pence 三种兑换,则有
y(1,2,5;n)=y(1,2;n)+y(1,2;n-5)+y(1,2;n-10)+...           
一般化,y(1,2,...,n0,n1;n)=y(1,2,...,n0;n)+y(1,2,...,n0;n-n1)+y(1,2,...,n0,n-2*n1)+...
且y(1,n0;n)=int(n/n0)+1
所以代码为(就用list实现的)
CODE:
#!/usr/bin/env python

def euler31(l):
    lt=len(l)
    if lt==3:
        return int(l[2]/l[1])+1
    elif lt>3:
        sum=0
        for i in range(int(l[lt-1]/l[lt-2])+1):
            la=l[:lt-2]+[l[lt-1]-i*l[lt-2]]
            sum+=euler31(la)
        return sum
   
if __name__ == "__main__":
    l=[1,2,5,10,20,50,100,200]
    print euler31(l)+1

不过最后还要加一才得到正确答案,因为题目中把1个200pence也算成一种方法了

[ Last edited by wangww2011 on 2011-7-26 at 21:24 ]
11楼2011-07-26 21:08:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见