阿里笔试4.27场
第二题
勇者和怪物各三个属性,血量H,攻击力A,防御力D
回合制战斗,伤害计算max(A-D, 1)
每战胜一只怪物,奖励三选一:H+1000,A+10或D+10
最多战胜多少
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct Hero
{ int H; int A; int D;
***t H_, int A_, int D_ ) : H(H_), A(A_), D(D_) {};
};
bool fight(Hero &hero, Hero monster)
{
while (hero.H > 0 && monster.H > 0)
{
monster.H -= max(hero.A - monster.D, 1);
if (monster.H <= 0) return true;
hero.H -= max(monster.A - hero.D, 1);
if (hero.H <= 0) return false;
}
}
int main()
{
int H, A, D, n;
cin >> H >> A >> D >> n;
Hero hero(H, A, D);
vector<Hero> monsters;
for (int i = 0; i < n; i++)
{
cin >> H>> A>> D;
Hero monster(H, A, D);
monsters.push_back(monster);
}
int successNumber = 0;
queue<Hero> qHeroStatus;
qHeroStatus.push(hero);
while (!qHeroStatus.empty())
{
int sz = qHeroStatus.size();
bool flag = false;
for (int i = 0; i < sz; i++)
{
Hero tmpHero = qHeroStatus.front();
qHeroStatus.pop();
//fight
if (fight(tmpHero, monsters[successNumber]))
{
flag = true;
Hero tmp1 = tmpHero, tmp2 = tmpHero, tmp3 = tmpHero;
tmp1.H += 1000;
tmp2.A += 10;
tmp3.D += 10;
qHeroStatus.push(tmp1);
qHeroStatus.push(tmp2);
qHeroStatus.push(tmp3);
}
}
if(flag) successNumber++;
if (successNumber == n) break;
}
cout << successNumber ;
return 0;
} 
