Python 巨人吃豆

代码题:
有一个巨人,每走一米需要吃一颗豆子,身上最多带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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值