题目链接:Click here
题意:战士要到一座MAGIC TOWER上打败一个BOSS解救公主,战士跟BOSS有各自的血量值,攻击值和防御值,两个人轮流攻击对方,当某一方血量小于或等于零的时候结束,问战士是否能打败BOSS
思路:开始的时候单纯的用循环来,结果超时了。。。。
具体看代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
char name;
int wh, wa, we, bh, ba, be, flag, a1, a2;
int w_a, b_a, tag;
while(scanf("%c", &name) != EOF)
{
scanf("%d%d%d", &wh, &wa, &we);
scanf("%d%d%d", &bh, &ba, &be);
a1 = a2 = 0;
w_a = wa - be;
b_a = ba - we;
if(w_a < 0)
w_a = 0;
if(b_a < 0)
b_a = 0;
if(w_a == 0)
//如果战士攻击力为零,那么必定输
flag = 0;
else if(b_a == 0)
flag = 1;
else
{
a1 = bh / w_a;
a2 = wh / b_a;
//计算两人打对方知道HP为零或者还有一次的血量时需要的次数
if(a1 < a2)
{
bh = bh - (a1 * w_a);
wh = wh - (a1 * b_a);
}
else
{
bh = bh - a2 * w_a;
wh = wh - a2 * b_a;
}
if(bh == 0 && wh == 0)
//如果同时血量为零,那么判断谁先攻击,先攻击的获胜
{
if(name == 'W')
flag = 1;
else
flag = 0;
}
else
{
if(name == 'W')
tag = 1;
else
tag = 0;
while(wh > 0 && bh > 0)
{
if(tag == 1)
{
bh -= w_a;
tag = 0;
}
else
{
wh -= b_a;
tag = 1;
}
}
if(wh <= 0)
flag = 0;
else
flag = 1;
}
}
if(flag == 0)
printf("Warrior loses\n");
else
printf("Warrior wins\n");
getchar();
}
return 0;
}