在魔兽世界里,猎手碰到了一个怪物,准备杀怪升级。此时猎手和怪物的血量分别为B1,B2 ,我们已知猎手对怪物的每次攻击伤害为a ,而怪物每次对猎手的伤害为b (攻击的伤害值,即为被攻击者血量减少的数值),他们交替进攻,猎手身上随身带了n个血瓶,只要猎手喝下一个血瓶,他的血量会立刻恢复到原来的状态(即血量为B1)。勇敢的猎手不会退缩,会战斗到最后一刻。
猎手先进攻。猎手在进攻过程中每次只能选择一个动作:要么砍怪,要么喝血瓶,。即如果喝血瓶时,就不可以砍怪。
猎手或者怪物任何一方血量减少到0或以下,就立即死亡,不能再进行进攻。如果猎手杀怪成功输出win,不然输出lose。
输入包含多组数据,每组数据占一行,有5个整数,依次为B1,B2,a,b,n。
对于每组输入数据,输出win或者lose表示猎手杀怪是否成功。每组输出独占一行。
Sample Input:
10 30 3 2 1
4 10 2 2 1
Sample Output:
lose
lose
Hint:
B1,B2,a,b,n的值可能很大(不超过int型)。
思路:
1.明确几个数量值代表的意义:B1(猎人的血量),B2(怪物的血量),a(猎人对怪物的伤害),b(怪物对猎人的伤害),n(血瓶个数)
2.分析猎人血量减少的因素有:怪物伤害b、还有因为喝血瓶浪费的血量(UseExcet) n * (B1 % b)或者 n * b。注意喝血瓶是加满到上线B1,超过的部分就是浪费的血。
3.计算所有血瓶加上猎人原有的满血量B1,可知猎人总共有的血量(AllHp):(1 + n) * B1 - UseExcet
4.分析边界条件:胜利的情况:怪没血了,猎人还有血。执行过程:怪物攻击猎人的次数为DamageTime = AllHp / b 次喝血瓶次数为 n,所以总共猎人可以攻击的次数为AllDamageTime = DamageTime - n,在AllDamageTime次攻击下 怪物的血减少到 a(以下),因为是猎人先攻击的,所以最后一次攻击还是猎人的,即可判断胜利。
程序流程:计算猎人总共的血量 ---> 计算猎人攻击次数 ---> 判断是否胜利 --->输出结果。
参考代码:
#include<stdio.h>
int main()
{
int B1,B2,a,b,n;
while (EOF != scanf("%d %d %d %d %d", &B1, &B2, &a, &b, &n))
{
int UseExcet;
if(0 == B1 % b)
UseExcet = n * b;
else
UseExcet = n * (B1 % b);
int AllHp = (1 + n) * B1 - UseExcet;
int DamageTime = AllHp / b;
B2 -= (DamageTime - n) * a;
if (B2 > a)
printf("lose/n");
else
printf("win/n");
}
return 0;
}
猎手先进攻。猎手在进攻过程中每次只能选择一个动作:要么砍怪,要么喝血瓶,。即如果喝血瓶时,就不可以砍怪。
猎手或者怪物任何一方血量减少到0或以下,就立即死亡,不能再进行进攻。如果猎手杀怪成功输出win,不然输出lose。
输入包含多组数据,每组数据占一行,有5个整数,依次为B1,B2,a,b,n。
对于每组输入数据,输出win或者lose表示猎手杀怪是否成功。每组输出独占一行。
Sample Input:
10 30 3 2 1
4 10 2 2 1
Sample Output:
lose
lose
Hint:
B1,B2,a,b,n的值可能很大(不超过int型)。
思路:
1.明确几个数量值代表的意义:B1(猎人的血量),B2(怪物的血量),a(猎人对怪物的伤害),b(怪物对猎人的伤害),n(血瓶个数)
2.分析猎人血量减少的因素有:怪物伤害b、还有因为喝血瓶浪费的血量(UseExcet) n * (B1 % b)或者 n * b。注意喝血瓶是加满到上线B1,超过的部分就是浪费的血。
3.计算所有血瓶加上猎人原有的满血量B1,可知猎人总共有的血量(AllHp):(1 + n) * B1 - UseExcet
4.分析边界条件:胜利的情况:怪没血了,猎人还有血。执行过程:怪物攻击猎人的次数为DamageTime = AllHp / b 次喝血瓶次数为 n,所以总共猎人可以攻击的次数为AllDamageTime = DamageTime - n,在AllDamageTime次攻击下 怪物的血减少到 a(以下),因为是猎人先攻击的,所以最后一次攻击还是猎人的,即可判断胜利。
程序流程:计算猎人总共的血量 ---> 计算猎人攻击次数 ---> 判断是否胜利 --->输出结果。
参考代码:
#include<stdio.h>
int main()
{
int B1,B2,a,b,n;
while (EOF != scanf("%d %d %d %d %d", &B1, &B2, &a, &b, &n))
{
int UseExcet;
if(0 == B1 % b)
UseExcet = n * b;
else
UseExcet = n * (B1 % b);
int AllHp = (1 + n) * B1 - UseExcet;
int DamageTime = AllHp / b;
B2 -= (DamageTime - n) * a;
if (B2 > a)
printf("lose/n");
else
printf("win/n");
}
return 0;
}