网易互娱2022校园招聘在线笔试 -《魔塔》

130 阅读2分钟

在经典游戏《魔塔》中,玩家需要控制主角与一个又一个怪物战斗。小明很喜欢
这个游戏,最近决定自己做一个魔塔玩玩,但是他在设置人物血量时犯了难,你能帮帮他吗?
在小明的设计中,主角和怪物都有攻击力、防御力、生命值三个属性,一共有N个怪物,且主角与怪物战斗的顺序是固定的。每场战斗都由主角先手,然后双方轮
流攻击,实际造成的伤害等于攻击力减去对方的防御力(伤害小于0时按0计算),直到一方的生命值归零后战斗才会结束。除此之外,小明还给主角加了一
个被动技能:
【被动技能一回复】在主角发动政击时,如果伤害值大于敌人剩余的生命值,那么溢出的伤害会为自己回复等量的生命。
在整个挑战过程中,任何时刻如果主角的生命值变为O,都会立即死亡,挑战失败。请问主角初始至少需要多少生命值才能保证通关呢?
输入描述:
输入第一行为一个正整数r,表示数据组数。
对于接下来每组数据,第一行为一个正整数N,表示怪物的数量。第二行为两个整数A和B,分别表示主角的攻击力和防御力。
接下来N行,每行三个整数A_i、B_i和H_i,表示第i个怪物的攻击力、防御力和生命值。
数据范围:
对于所有数据,满足1<=T<=5,1<=N<=100,0<=A,B,A_i,B_i<=100,1<=H i<=1000,

package com.sxf;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Solution {
    public int sum(int[][] gws) {
        int sums = 0;
        for (int[] gw: gws) {
            for (int val : gw) {
                sums += val;
            }
        }
        return sums;
    }

    public int demo(int u_gj, int u_fy, int[][] gws) {
        List<Integer> temp = new ArrayList<>();
        int[] gw;
        while (sum(gws) != 0) {
            for (int i = 0; i < gws.length; i++) {
                gw = gws[i];

                if (gw[0] + gw[1] + gw[2] == 0) {
                    continue;
                }
                // 怪物实际攻击值
                int gw_gj = Math.max(gw[0] - u_fy, 0);
                //  主角实际攻击值
                int user_gj = Math.max(u_gj - gw[1], 0);

                // 主角攻击力<=怪物防御力,打不过
                if (user_gj == 0) {
                    return -1;
                }

                while (gw[2] > 0) {
                    // 主角攻击
                    // 怪物死亡
                    if (user_gj >= gw[2]) {
                        temp.add(-(user_gj - gw[2]));
                        gw[0] = 0;
                        gw[1] = 0;
                        gw[2] = 0;
                        break;
                    } else {
                        gw[2] = gw[2] - user_gj;
                    }
                    // 怪物攻击
                    temp.add(gw_gj);

                }
            }
        }
        int sum = 0;
        int result = 0;
        for (Integer val : temp) {
            sum += val;
            result = Math.max(result, sum);
        }
        return result+1;
    }

}

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            while (sc.hasNext()) {
                int group = sc.nextInt();
                for (int i = 0; i < group; i++) {
                    int gwNums = sc.nextInt();
                    int user_gj = sc.nextInt();
                    int user_fy = sc.nextInt();
                    int[][] gws = new int[gwNums][3];
                    for (int j = 0; j < gwNums; j++) {
                        gws[j][0] = sc.nextInt();
                        gws[j][1] = sc.nextInt();
                        gws[j][2] = sc.nextInt();
                    }
                    int res = new Solution().demo(user_gj, user_fy, gws);
                    System.out.println(res);
                }
            }
        }catch (Exception e){

        }
    }
}