NIT-OJ-1411-恶魔杀怪-解题报告

在魔兽世界里,猎手碰到了一个怪物,准备杀怪升级。此时猎手和怪物的血量分别为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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值