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,看半天没看明白。解决思路应该是模拟计算吧,难点在算假山在注入水时候的在水中的体积。
#网易互娱笔试##笔经##网易互娱#