玩家vsBoss

来源:2016华为校招


题目描述:

某游戏中,玩家的任务是杀死终极BOSS。BOSS和玩家战斗方式为回合制,玩家先发动进攻。BOSS的攻击方式为:普通攻击和暴击,每4回合普通攻击的下一回合攻击为暴击。BOSS的普通攻击力为10点HP,暴击时的攻击力为普通攻击的3倍。玩家的攻击方式为:普通攻击和魔法攻击。玩家的普通攻击为17点HP,魔法攻击为60点HP。使用魔法攻击时需要消耗10点魔法值,魔法值来源有两种:初始魔法量和回合内选择魔法恢复,魔法恢复速度为4点/回合,魔法恢复回合内无法发动攻击。每轮回合开始时,玩家可以选择:普通攻击、魔法攻击或恢复魔法三种行动方式之一。现已知玩家的HP和初始魔法量,BOSS的HP,编写程序,求玩家战胜BOSS的最小回合数。

要求:1 Sec\100 MByte

输入:输入三个整数HP(0<HP1<=10000),MP(0<MP<=1000),HP2(0<HP2<=10000),分别为玩家的HP、玩家的初始魔法量和BOSS的HP。

输出:

若玩家可以战胜BOSS输出战胜BOSS的最小回合数,否则输出-1.

样例

输入:100 20 100

输出:2


编译器为g++ 4.6.4

代码如下:

#include <iostream>
using namespace std;

int bossattack(int playerhp)
{
        int i,j;
        i=(playerhp/70)*5;
        j=(playerhp%70)/10+1;
        return i+j;
}

int count=0;

int playerattack(int playermp,int bosshp)
{
        int r1,r2;
        if(bosshp<=0)
        return 0;
        if(playermp>=10)
        return count=1+playerattack(playermp-10,bosshp-60);
        else
        {
                r1=1+playerattack(playermp+4,bosshp);
                r2=1+playerattack(playermp,bosshp-17);
                return count=(r1<r2?r1:r2);
        }
}


int main()
{
        int player_hp,player_mp,boss_hp;
        cin>>player_hp>>player_mp>>boss_hp;
        int player_dead,boss_dead;
        player_dead=bossattack(player_hp);
        boss_dead=playerattack(player_mp,boss_hp);
        if(boss_dead<player_dead) cout<<boss_dead<<endl;
        else cout<<"-1"<<endl;
        return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值