python - 买鸡 穷举

100元
100只
公鸡2元/只
母鸡3元/只
小鸡0.5元/只

mn=100 #钱
m=2 #公鸡价格
f=3 #母鸡价格
s=0.5 #小鸡价格
n=100 #购买数量
o=0
for i in range(int(mn/m+1)):
    mm=i*2
    for j in range(int((100-mm)/3+1)):
        mmf=100-mm-j*3
        for k in range(int((100-mmf)/0.5+1)):
            if i+j+k==100 and mmf==k*0.5:
                o+=1
                print("方案%d:公鸡 %d 母鸡 %d 小鸡 %d"%(o,i,j,k))

# for i in range(51):
#     for j in range(34):
#         for k in range(201):
#             if i+j+k==100 and i*2+j*3+k*0.5==100:
#                 o+=1
#                 print("方案%d:公鸡 %d 母鸡 %d 小鸡 %d"%(o,i,j,k))

1、审题,无论是csdn还是这书上,都没有明确的说要把100元花完,丫的我就算按照花钱<=100的思路,他们也不一定会多给我分。
2、第一个方法是我按照花钱<=100算的。
改过两次,第一次,range(int()),增加了int()
第二次是看了树上的结果后,增加的价格判断,但因为之前就没考虑过这个问题,所以又自作聪明的把mm、mmf、加到价格判断中,而又写错了公式,所以之后又改了一遍。
3、数值结果不对,这次是我最开始的算法也有问题,所以又在range内+1。

方法二是我根据书上的意思改的。不过方法1的效率是方法2的三倍!

In [2]: %%timeit
   ...: for c in range(51):
   ...:     for r in range(51):
   ...:         if c+r==50 and c*2+r*4==120:
   ...:             ""
   ...:
127 µs ± 2.24 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [3]: %%timeit
   ...: for c in range(51):
   ...:     if c * 2 + (50-c) * 4 == 120:
   ...:         ""
   ...:
4.75 µs ± 179 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

这是鸡兔的题,没办法再优化了。用新上手的ipython跑了下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值