24小时热门版块排行榜    

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

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:27:41
微尘、梦想(金币+4): 话说我也喜欢这样干,哈哈…… 2011-06-19 17:26:47
余泽成(程序强帖+1): 鼓励交流! 2011-06-26 00:14:44
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
            for x=19:-1:0 % 10p
                for y=39:-1:0 % 5p
                    for z=99:-1:0 % 2p
                        if 2*z+5*y+10*x+20*k+50*j+100*i<=200 % 1p, 0 or more
                            result = result+1;
                        end
                    end
                end
            end
        end
    end
end
toc;
end

结果
CODE:
%% How many different ways can 2 be made using any number of coins?
% 1p, 2p, 5p, 10p, 20p, 50p, 1 (100p) and 2 (200p).
% Elapsed time is 0.100646 seconds.
% ans =
%        73682

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-06-19 13:54:25
已阅   回复此楼   关注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 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见