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跑了下