网易互娱笔试代码分享 全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
}
}
}
}