首页 > 试题广场 >

回合制游戏

[编程题]回合制游戏
  • 热度指数:7321 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
你在玩一个回合制角色扮演的游戏。现在你在准备一个策略,以便在最短的回合内击败敌方角色。在战斗开始时,敌人拥有HP格血量。当血量小于等于0时,敌人死去。一个缺乏经验的玩家可能简单地尝试每个回合都攻击。但是你知道辅助技能的重要性。
在你的每个回合开始时你可以选择以下两个动作之一:聚力或者攻击。
    聚力会提高你下个回合攻击的伤害。
    攻击会对敌人造成一定量的伤害。如果你上个回合使用了聚力,那这次攻击会对敌人造成buffedAttack点伤害。否则,会造成normalAttack点伤害。
给出血量HP和不同攻击的伤害,buffedAttack和normalAttack,返回你能杀死敌人的最小回合数。

输入描述:
第一行是一个数字HP
第二行是一个数字normalAttack
第三行是一个数字buffedAttack
1 <= HP,buffedAttack,normalAttack <= 10^9


输出描述:
输出一个数字表示最小回合数
示例1

输入

13
3
5

输出

5
#include <stdio.h>

int main()
{
    int HP, normalAttack, buffedAttack;
    int count = 0;
    scanf("%d\n%d\n%d", &HP, &normalAttack, &buffedAttack);
    //如果攻击大于敌方血量,则只需要一回合。
    if(HP < normalAttack)
        count = 1;
    //如果聚力大于敌方血量,则只需要两回合。
    else if(HP < buffedAttack)
        count = 2;
    //如果两倍的攻击大于聚力,则每一回合都使用攻击。否则使用聚力。
    else if(2*normalAttack >= buffedAttack)
    {
        count = HP/normalAttack;
        if(HP%normalAttack)
            count++;
    }
    else
    {
        count = HP/buffedAttack*2;
        int rem = HP%buffedAttack;
        //最后一回合敌人剩余的血量不为0,且小于攻击,则选择攻击;否则选择聚力。
        if(rem != 0 && rem <= normalAttack)
            count++;
        else if(rem > normalAttack)
            count+=2;
    }
    printf("%d", count);
    return 0;
}

发表于 2021-10-18 21:22:27 回复(0)