阿里笔试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; }