PTA 7-333 晨阳哥哥lol之推塔

PTA 7-333 晨阳哥哥lol之推塔

分数 20
作者 蔡尚真
单位 绍兴文理学院元培学院

在非常流行的LOL游戏中,想要获胜,必须要推塔,推塔会为全队带来经济收益和经验收益,所以在很多情况下我们要尽力推掉一座塔。
现在假设我们在敌方塔下,我们知道自身当前血量X,自身攻击力K,敌方塔下有N(N<=20)只己方小兵,每个小兵血量为x[i],攻击力为k[i],没有敌方小兵,防御塔生命值为A,攻击力B,我们都知道,即使小兵只剩下一点血,也会消耗防御塔一次攻击,假设小兵,英雄,防御塔攻击速度相等,且防御塔优先攻击第一发,为了计算方便,假设防御塔会按照顺序(x[1]~x[n])攻击小兵。
你的任务是判断可否推掉塔。

输入格式:
第一行先输入测试组数T,表示有T组测试数据。
第二行输入英雄生命值X,攻击力K。
第三行输入小兵数量N,随后每行行输入第i只小兵的血量x[i]和攻击力k[i]。
最后输入防御塔的血量和攻击力。

输出格式:
如果在我方死光前推掉防御塔,输出YES,否则输出NO。

输入样例:
在这里给出一组输入。例如:

3
1000 50
3
10 10 
10 10
10 10
500 20
100 50
2
10 10
10 10
500 10
2000 100
5
100 30
200 50
100 30
50  80
50  80
3000 200

输出样例:
在这里给出相应的输出。例如:

YES
YES
NO

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

#include <stdio.h>

struct data{        //定义结构体
    int HP;    //生命值
    int ATK;    //攻击力
};

int main(){

    int T;
    int batmanNumb;    //小兵数量
    scanf("%d", &T);
    
    while(T--){
        
        struct data hero;    //英雄结构变量
        scanf("%d %d", &hero.HP, &hero.ATK);
        
        scanf("%d", &batmanNumb);
        struct data batman[batmanNumb];    //小兵结构变量
        
        for(int i = 0; i < batmanNumb; i++){
            scanf("%d %d", &batman[i].HP, &batman[i].ATK);
        }
        struct data MTD;    //防御塔结构变量
        scanf("%d %d", &MTD.HP, &MTD.ATK);
        
        int p = batmanNumb;    //剩余小兵数量
        int q = 0;    //数组下标
        int r = 0;
        
        while(1){
            batman[q].HP -= MTD.ATK;    //防御塔优先攻击第一次
            if(batman[q].HP <= 0){    //当前小兵阵亡时
                p--;    //小兵数量-1
                r++;    //r前的小兵阵亡,从第r只小兵开始攻击
                q++;
            }
            for(int i = r; i < p; i++){    //剩余小兵攻击防御塔
                MTD.HP -= batman[p].ATK;
            }
            if(batman[batmanNumb-1].HP <= 0){    //小兵全部阵亡后
                hero.HP -= MTD.ATK;
            }
            MTD.HP -= hero.ATK;    //英雄攻击防御塔
            
            if(MTD.HP <= 0){    //防御塔阵亡
                printf("YES\n");
                break;
            }else if(hero.HP <= 0){    //英雄和小兵阵亡
                printf("NO\n");
                break;
            }
        }
    }
    return 0;
}

解题思路:
step1:定义结构体储存数据
step2:防御塔优先攻击第一个小兵,考虑第一小兵是否阵亡,若阵亡就不攻击;但是其他小兵和英雄会攻击防御塔,求出当前所有单位的生命值,然后进行下一次攻击
step3:当小兵全部阵亡时,,考虑英雄的攻击,只到防御塔阵亡或者英雄阵亡
step4:输出"YES"或"NO"

归属知识点:
结构体
循环结构
条件判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值