[C/C++]回合制游戏 - 2019校招编程刷题

[C/C++]回合制游戏 - 2019校招编程刷题

参考链接
题目描述
你在玩一个回合制角色扮演的游戏。现在你在准备一个策略,以便在最短的回合内击败敌方角色。在战斗开始时,敌人拥有HP格血量。当血量小于等于0时,敌人死去。一个缺乏经验的玩家可能简单地尝试每个回合都攻击。但是你知道辅助技能的重要性。
在你的每个回合开始时你可以选择以下两个动作之一:聚力或者攻击。
聚力会提高你下个回合攻击的伤害。
攻击会对敌人造成一定量的伤害。如果你上个回合使用了聚力,那这次攻击会对敌人造成buffedAttack点伤害。否则,会造成normalAttack点伤害。
给出血量HP和不同攻击的伤害,buffedAttack和normalAttack,返回你能杀死敌人的最小回合数。
输入描述

第一行是一个数字HP
第二行是一个数字normalAttack
第三行是一个数字buffedAttack
1 <= HP,buffedAttack,normalAttack <= 10^9

输出描述

输出一个数字表示最小回合数

输入例子1:

13
3
5

输出例子1:

5

思路

  • 想清楚回合制游戏,蓄力攻击如果有优势,那就是蓄力一回合+buff攻击一回合 = 两回合出击一次。
  • 普通攻击如果有优势,那就是normal攻击一回合,每回合出击一次。
  • 如果判别哪个有优势呢,那就是看平均每回合的伤害点谁大,即为判断 buffedAttack / 2 与 normalAttack谁大。
  • 如果普攻优势大,那就一直平(普攻)就可以。次数就是 HP / normalAttack += HP %normalAttack?1:0;
  • 如果蓄力优势大,那就一直蓄力。
  • 如果采取蓄力攻击,打了N回合,发现怪还剩最后一次攻击(蓄力攻击)就死了,那就看这个怪的剩余血量是否大于普攻,如果小于等于普攻,那就普攻一次就可以结束战斗。如果大于普攻那就可以选择蓄力出击结束战斗。次数就是 (HP / buffedAttack)*2 += HP % buffedAttack > normalAttack?2:0;

Just show my code


代码(c++/c)

#include<iostream>
using namespace std;
int main(){
  int HP,normalAttack,buffedAttack,n;
  cin >> HP>> normalAttack >> buffedAttack;
  
  if (buffedAttack > normalAttack * 2){
    n = 2 * (HP / buffedAttack);
    if(HP % buffedAttack!=0){
      if( HP % buffedAttack  > normalAttack){
        n+=2;
      }else{
        n++;
      }
    }
  }else{
    n = HP / normalAttack ;
    if(HP % normalAttack!=0){
      n++;
    }
  }
  cout << n << endl;
  return 0;
}

如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值