24小时热门版块排行榜    

查看: 1551  |  回复: 10
本帖产生 2 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第三十一题: 换零钱 已有4人参与

话说英国的钱有两种, 一种是英镑(£), 一种是便士(p). 一共有8种硬币:

1p, 2p, 5p, 10p, 20p, 50p, £1 (100p), £2 (200p).

2 英镑可以换成这样:

1*£1 + 1*50p + 2*20p + 1*5p + 1*2p + 3*1p

那么2英镑一共可以有多少种换零钱的方法呢?

[ Last edited by holmescn on 2011-6-26 at 00:07 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

引用回帖:
Originally posted by libralibra at 2011-06-19 13:54:25:
matlab穷举
[code]function result = euler31()
tic;
result = 7; % only use 200,100,50,20,10,5,2 respectively, 7 methods
for i=1:-1:0 % 1
    for j=3:-1:0 % 50p
        for k=9:-1:0 % 20p
     ...

你牛!

还有, 怎么是小于等于200啊, 应该是等于200吧.

[ Last edited by holmescn on 2011-6-19 at 17:05 ]
3楼2011-06-19 17:03:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-06-26 00:15:09
python 版 递归穷举法
CODE:
pence = [1, 2, 5, 10, 20, 50, 100]

results = []

def euler31(TwoPound, index):
    if sum(TwoPound) == 200:
        results.append(TwoPound)
        return

    while index < len(pence):
        if sum(TwoPound) + pence[index] > 200:
            return
        else:
            euler31(TwoPound + [pence[index]], index)
        index += 1

if __name__ == "__main__":
    euler31([], 0)
    print len(results)

算法用时16.5秒,不过我的结果怎么是73681啊。少一个。
7楼2011-06-25 15:16:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-06-26 00:39:54
引用回帖:
Originally posted by libralibra at 2011-06-25 15:45:26:
你pence少一个数,200啊

pence = [1, 2, 5, 10, 20, 50, 100, 200]

喔,少了这一个啊。那就不是换零钱了啊。哪儿有用2英镑换2英镑的。
9楼2011-06-25 21:36:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见