Pokemon

题意:
牛牛是励志成为世界第一宝可梦大师的宝可梦训练家。现在他遇到了一个强劲的野生宝皮卡丘,野生宝皮卡丘的生命值是HP,攻击力是ACK,牛牛召唤的宝可梦是杰尼龟。杰尼龟的生命值是HP2,攻击力是ACK2,除此之外身为训练家还可以给宝可梦吃药让他满血复活(吃药发生在双方发动攻击之前,并且吃药一方不得在本回合发动攻击)。牛牛想知道他最少多少回合才能能打败野生宝皮卡丘?因为皮卡丘会电光一闪,所以皮卡丘总是比杰尼龟先发动攻击。如果牛牛无法战胜野生皮卡丘则返回-1。

输入:
包括HP ACK HP2 ACK2 1<HP,ACK,HP2,ACK2< 1012, 1≤HP,ACK,HP2,ACK2≤1012

输出:
若能成功击败野生皮卡丘则返回最少回合数,否则返回-1。

输入
复制
8,3,8,1
输出
复制
14
说明
至少需要14回合战胜野生皮卡丘

示例2
输入
复制
1,1,1,1
输出
复制
-1
说明
皮卡丘先出招就直接打死了杰尼龟,所以无法获胜

    long long Pokemonfight(long long HP, long long ACK, long long HP2, long long ACK2) {
        long long res1=0;
        long long res2=0;
        long long res3=0;
        //判断是否杰尼龟是否一下子就死 例子2 4 4 2
        if(HP2<=ACK)
            return -1;
        // 由上面知杰尼龟未一下子死.则判断是否杰尼龟一下子皮卡丘死
        //例子 4,2 4,4
        if(HP<=ACK2)
            return 1;
        //由上面知,两个不会一下子死.则若杰尼龟的血量小于皮卡丘的攻击 则会不断的补血 从而不会攻击皮卡丘.
        if(HP2 <=2*ACK)
            return -1;
        //杰尼龟 必须要攻击这么多下.向上取整
        res1 = HP / ACK2;
        if(HP%ACK2!=0)
            res1+=1;
        //由于杰尼龟补血的时机必须多承受一回合的攻击并且还需要有多余的血量.
        //例子8 3 8 1 则当血量为5时的第二回合必须回血
        res2 = (HP2-ACK)/ACK;
        if(HP2%ACK==0)
            res2-=1;
        //若承受的伤害小于必要攻击的血量 则会在攻击完后还有剩余血量
        if(res1<res2+1)
            res3=0;
        else{
        //攻击的最后一回合必须攻击后打死
        //则需要第一次补血时的,还剩余必须的攻击次数
        //向上取整
            res3 = (res1-res2-1)/res2;
            if((res1-res2-1)%res2!=0)
                res3+=1;
        }
        
        return res1+res3;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值