首页 > 8.28网易互娱后端笔试
头像
再吃一颗苹果_
编辑于 2021-08-28 18:51
+ 关注

8.28网易互娱后端笔试

第一题,模拟杀怪游戏,求主角的最低生命值设置为多少?
思路就是血量H从0开始,模拟互砍,H出现负值就取反加到count,H初始化为0。最后count的结果是整个杀怪结束血量为0的情况,返回count+1。
import java.util.*;

public class Main {

    static int[] Ai,Bi,Hi;
    static int A,B,H,count ;
    static int n,t;
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        t=in.nextInt();
        for (int group=0; group<t; group++) {
            n=in.nextInt();
            A=in.nextInt();
            B=in.nextInt();
            H=0;
            Ai=new int[n];
            Bi=new int[n];
            Hi=new int[n];
            for (int i=0; i<n; i++) {
                Ai[i]=in.nextInt();
                Bi[i]=in.nextInt();
                Hi[i]=in.nextInt();
            }
            count=0;
            H=getMinH();
            System.out.println(H);
        }
    }

    private static int getMinH() {
        //主角和怪兽真实伤害
        int[] userActualDamage=geyUserActualDamage();
        int[] beastActualDamage=geyBeastActualDamage();
        //若主角真实伤害为0,返回-1
        if (containZeroDamage(userActualDamage))
            return -1;
        else {
            for (int i=0; i<n; i++) {
                //模拟互砍
                while (Hi[i]>0){
                    Hi[i]-=(userActualDamage[i]>0?userActualDamage[i]:0);
                    //主角被动,恢复血量
                    if (Hi[i]<=0){
                        H+=(-Hi[i]);
                    }
                    else {
                        H-=(beastActualDamage[i]>0?beastActualDamage[i]:0);
                        //若主角血量为负值记录到count,并初始化为0
                        if (H<0) {
                            count+=(-H);
                            H=0;
                        }
                    }
                }
            }
            return count+1;
        }
    }

    private static boolean containZeroDamage(int[] arr) {
        for (int i : arr) {
            if (i<0)
                return true;
        }
        return false;
    }

    private static int[] geyUserActualDamage() {
        int arr[]=new int[Bi.length];
        for (int i=0; i<Bi.length; i++) {
            arr[i]=A-Bi[i];
        }
        return arr;
    }
    private static int[] geyBeastActualDamage() {
        int arr[]=new int[Ai.length];
        for (int i=0; i<Bi.length; i++) {
            arr[i]=Ai[i]-B;
        }
        return arr;
    }
}
	

第二题,应该是有向无环图最短路径,跟LeetCode课程表那道题比较像,参考着改应该就可以了。
第三题,鱼缸注水。题干里小写L我一直以为是数字1,看半天没看明白。解决思路应该是模拟计算吧,难点在算假山在注入水时候的在水中的体积。

全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐