題目描述
你在玩一個回合制角色扮演的游戲,現在你在準備一個策略,以便在最短的回合內擊敗敵方角色,在戰斗開始時,敵人擁有HP格血量,當血量小于等于0時,敵人死去,一個缺乏經驗的玩家可能簡單地嘗試每個回合都攻擊,但是你知道輔助技能的重要性,
在你的每個回合開始時你可以選擇以下兩個動作之一:聚力或者攻擊,
聚力會提高你下個回合攻擊的傷害,
攻擊會對敵人造成一定量的傷害,如果你上個回合使用了聚力,那這次攻擊會對敵人造成buffedAttack點傷害,否則,會造成normalAttack點傷害,
給出血量HP和不同攻擊的傷害,buffedAttack和normalAttack,回傳你能殺死敵人的最小回合數,
輸入描述:
第一行是一個數字HP
第二行是一個數字normalAttack
第三行是一個數字buffedAttack
1 <= HP,buffedAttack,normalAttack <= 10^9
輸出描述:
輸出一個數字表示最小回合數
示例1
輸入
13
3
5
輸出
5
決議:
如果buffedAttack>=2normalAttack ,這時候使用重擊能大大減小所需的回合數,使用重擊后如果剩余血量為0,那重擊所需的回合數2就是最小回合數了,
如果使用重擊后剩余的血量少于普通攻擊的傷害量,那再補一回合的普通攻擊就是最小回合數,如果剩余的血量大于或遠大于普通攻擊的傷害量,這時候再補一回合的重擊則為最小回合數(注意:重擊是兩回合)
反之如果buffedAttack<2*normalAttack,這時候肯定是全程使用普通攻擊最為合適了,
代碼:
#include <cstdio>
using namespace std;
int main(){
int HP,normalAttack,buffedAttack,num=0;
scanf("%d",&HP);
scanf("%d",&normalAttack);
scanf("%d",&buffedAttack);
if(buffedAttack>=(2*normalAttack)) {
//yu為剩余血量
int yu=HP%buffedAttack;
num=(HP/buffedAttack)*2; //重擊回合數
if(yu!=0){
//如果使用重擊后剩下的血量少于普通攻擊的傷害量,那剩余的血量用普通攻擊
//若剩余的血量大于普通攻擊的傷害量,那再使用一次重擊則較為合適,回合數也會最小
if(yu<=normalAttack){
num+=1;
}else{
num+=2;
}
}
}else{
//HP不管是不是普通攻擊的整數倍,(HP-1)/normalAttack+1都為總會和數,自己可找數驗證
num=(HP-1)/normalAttack+1;
}
printf("%d",num);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/216166.html
標籤:其他
