网易互娱笔试代码分享 全AC
三道都AC了
1 二进制的种类数
package neteasegame2020fall; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class No1SortsOfBinary { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt();//测试组数 while (T-->0){ int n=sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i <arr.length ; i++) { arr[i]=sc.nextInt(); } Map<Integer,Integer> map = new HashMap(); for (int i = 0; i <arr.length ; i++) { int temp = numberOfOne(arr[i]); map.put(temp,1);//标记该类出现过 } int count=0; for (Map.Entry<Integer,Integer> it:map.entrySet()){ if (it.getValue()==1) count++; } System.out.println(count); } } //采用与运算可以提高计算效率 private static int numberOfOne(int i) { int cnt = 0; while (i!=0){ i=i&(i-1); cnt++; } return cnt; } }
package neteasegame2020fall; import java.util.Scanner; public class No2Pool { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt();//测试组数 while (T-->0){ int m=sc.nextInt(); int t=sc.nextInt(); int m1=sc.nextInt(); int t1=sc.nextInt(); int m2=sc.nextInt(); int t2=sc.nextInt(); int timer=t;//记录总时间 int timer1=2*t1;//给水计数器 int timer2=2*t2;//排水计数器 int left=0;//每一分钟剩余的水 //采用每分钟都判断一次的方法 while (timer-->0){ timer1--; timer2--; int geishui=0; int paishui=0; if (timer1>=t1) geishui=m1; if (timer2>=t2) paishui=m2; left=left+geishui-paishui;//每分钟后的水量 if (left>m) //不能超过水池最大 left=m; if (left<0) //不能小于0 left=0; if (timer1==0) timer1=2*t1; if (timer2==0) timer2=2*t2; } System.out.println(left); } } }3 最长幸运N
package neteasegame2020fall; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class No3ChangeTimesForNotN { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt();//测试组数 while (T-->0){ String s=sc.next(); List<Integer> list = new ArrayList<>(); for (int i = 0; i <s.length() ; i++) { if (s.charAt(i)!='N') list.add(i); } //如果不是N次数小于2,直接输出长度 if (list.size()<=2) System.out.println(s.length()); else { //如果不是N次数大于2,改变字母越多越好,所以都改两个 int maxLen=0; int temLen=0; for (int i = 0; i <s.length() ; i++) { if (s.charAt(i)=='N') temLen++; else temLen=0; if (temLen>maxLen) maxLen=temLen; } // System.out.println(maxLen); int size=list.size(); int firstMax=list.get(2); int lastMax=s.length()-1-list.get(size-3); maxLen=Math.max(Math.max(firstMax,lastMax),maxLen); // System.out.println(firstMax); // System.out.println(lastMax); for (int i = 1; i <size-2 ; i++) { int tempMax=list.get(i+2)-list.get(i-1)-1; if (tempMax>maxLen) maxLen=tempMax; } System.out.println(maxLen); //NGNNNGTNNNNGTTN } } } }