代码题:
有一个巨人,每走一米需要吃一颗豆子,身上最多带m颗豆子,桥长n米,桥这边有无数颗豆子,问巨人过桥最少要吃多少颗豆子。(巨人可以在桥上放豆子折返)
1、m=60,n=80 最少需要多少颗;如何证明是最少
2、m=60, n=81 最少需要多少颗
3、写代码实现 f(m,n)
要求1个小时内返回结果,给出 分析、思路和代码。
# coding=utf-8
def f(tempM,tempN):
count = 0
# [minN,maxN]
minN = 0
maxN = 0
# [minBean,maxBean]
minBean = 0
maxBean = 0
while(1):
if tempN <= maxN:
res = minBean+(tempN-minN)*(2*(count-1)+1)
break
else:
#tempM*(count+1)-(2*count+1)*a >= maxBean
#(2 * count + 1) * a <= tempM*(count+1)-maxBean
a = (tempM*(count+1)-maxBean)/(2*count+1)
minN = maxN
maxN = maxN + a
minBean = maxBean
maxBean = maxBean + a*(2*count+1)
count = count + 1
return res
if __name__ == "__main__":
n = 81
m = 60
print f(m,n)