首页 > 试题广场 >

Pokemon

[编程题]Pokemon
  • 热度指数:3988 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛是励志成为世界第一宝可梦大师的宝可梦训练家。现在他遇到了一个强劲的野生宝皮卡丘,野生宝皮卡丘的生命值是HP,攻击力是ACK,牛牛召唤的宝可梦是杰尼龟。杰尼龟的生命值是HP2,攻击力是ACK2,除此之外身为训练家还可以给宝可梦吃药让他满血复活(吃药发生在双方发动攻击之前,并且吃药一方不得在本回合发动攻击)。
牛牛想知道他最少多少回合才能能打败野生宝皮卡丘?
因为皮卡丘会电光一闪,所以皮卡丘总是比杰尼龟先发动攻击。若能成功击败野生皮卡丘则返回最少回合数,否则返回-1。
示例1

输入

8,3,8,1

输出

14

说明

至少需要14回合战胜野生皮卡丘
示例2

输入

1,1,1,1

输出

-1

说明

皮卡丘先出招就直接打死了杰尼龟,所以无法获胜

备注:
 
import math
class Solution:
    def Pokemonfight(self , HP , ACK , HP2 , ACK2 ):
        # write code here
        #打不过
        if ACK>=HP2:
            return -1
        if 2*ACK>=HP2 and ACK2<HP:
            return -1
        #站撸能过
        if (math.ceil(HP2/ACK)-1)*ACK2>=HP:
            return math.ceil(HP/ACK2)
        #回血锤它
        damage_f=(math.ceil(HP2/ACK)-2)*ACK2
        if HP%damage_f==0:
            return (HP/damage_f-1)*(math.ceil(HP2/ACK)-1)+(HP%damage_f)/ACK2
        else:
            return int(HP/damage_f)*(math.ceil(HP2/ACK)-1)+(HP%damage_f)/ACK2

发表于 2020-07-07 14:52:34 回复(0)