暑假才开始搞算法的数学僧求大神看看我写的算法

8月30号拼多多第一题,哎,模型的重要性啊!
第一题,杀怪游戏。每次选一个动作攻击或聚力(聚力的效果下一次攻击体现)。
怪的出始血量为HP,你每次普通攻击的伤害为normalAttack,聚力后的攻击为buffedAttack。
HP小于等于0时怪死亡。求最小回合把怪打死(大致就是这个意思吧)
例子,HP=13,normalA=3,buffedA=5
最少5回合可以杀死
分析:首先不能连续聚力,当聚力一次,下一回合必须攻击一次才算效率最高。有个小坑,buffed攻击不一定就比普通连续攻击的伤害高(当buffed攻击<=2*normal攻击时)。
攻击方式有四种(从第一次开始)1:normal攻击—聚力—buffed攻击,2:聚力-buffed攻击-normal攻击,
3:mormal攻击-mormal攻击-mormal攻击,4:聚力-buffed攻击-聚力,可能还有其他的情况,但是代表性也就这四种了(为什么这四种的回合都一样因为3个回合是一个循环这个对写算法帮助非常大),当buffed攻击>2*normal攻击时。
经过比较只有1,2效率最高他们相同选取1做算即可,当buffed攻击<=2*normal攻击时连续普通效果最高。
算法:
def kill_one(HP,normalA,buffedA):
    if buffedA<=2*normalA:
        a = HP/normalA
        if a>int(a):
            return int(a)+1
        else:
            return a
    else:
        b = HP/(normalA+buffedA)
        if b>int(b):
           c = HP-int(b)*(normalA+buffedA)
           d = c/normalA
           if d>int(d):
               return int(b)*3+int(d)+1
           else:
               return int(b)*3+d
        else:
            return b

HP=25
normalA=3
buffedA=7
kill_one(HP,normalA,buffedA)

输出8
3-聚力-7,3—聚力-7,3-3或者聚力-7





#笔试题目##拼多多##内推#
全部评论
这个题目,你数学生为什么不用数学算法。。。 判断normal attack*2 与 buff attach之间的攻击力差距,思考各种情况 直接o(1)的时间复杂度就解决了呀
点赞 回复 分享
发布于 2018-08-31 11:12
为什么是3个一循环而不是2个一循环,感觉只有普攻和蓄力功2种策略
点赞 回复 分享
发布于 2018-08-31 11:11
想起网易游戏春招笔试题...自己有血条,buff加攻加防,技能回血什么的。。。😒
点赞 回复 分享
发布于 2018-08-31 10:44

相关推荐

爱吃烤肠的牛油最喜欢...:50K是ssp了估计,ssp的人家多厉害都不用说,每年比例大概在百分之5左右
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务