最右笔试-Java-2022/7/26
时间:90分钟
选择题:15个,有点恶心,因为它全是不定项选择题,没给你区分单选还是多选
简单题:2个(有点恶心,不会做)
1.WebSocket 和Socket的区别
2.有关操作系统磁盘计算的问题,问题是:一个磁盘有500个柱面,每个柱面有200个磁道,每个磁道有10个扇区,每个扇区10B,计算和它相关的东西
编程题:
1.子串问题,我还以为要用使用KMP算法,我不会,直接暴力遍历,结果也都过了,看来这个题就不太考虑效率问题
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String[] speGenes=new String[n];
sc.nextLine();
for(int i=0;i<n;i++){
speGenes[i]=sc.nextLine();
}
int m=sc.nextInt();
sc.nextLine();
String gene;
boolean flag;
for(int i=0;i<m;i++) {
gene=sc.nextLine();
flag=false;
for(int j=0;j<n;j++) {
if(isSuperMan(speGenes[j],gene)) {
System.out.println("A new hero discovered");
flag=true;
break;
}
}
if(!flag) System.out.println("Just an ordinary person");
}
}
public static boolean isSuperMan(String special,String gene) {
if(special.length()>gene.length()) {
return false;
}
if(special.length()==gene.length()) return special.equals(gene);
for(int i=0;i<=(gene.length()-special.length());i++) {
int temp=i;
boolean flag=true;
for(int j=0;j<special.length();j++) {
if(gene.charAt(temp++)!=special.charAt(j)) {
flag=false;break;
}
}
if(flag) return true;
}
return false;
}
}
2.般家问题,就是有n天,有两个搬家公司,每个公司在不同天的可用车不同,但A,B公司切换时,中间必须空一天。我用dp做的,但只有80%的通过率。
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(new BufferedInputStream(System.in));
int n=sc.nextInt();
for(int i=0;i<n;i++) {
int m=sc.nextInt();
int[] a=new int[m];
int[] b=new int[m];
for(int j=0;j<m;j++) {
a[j]=sc.nextInt();
}
for(int j=0;j<m;j++) {
b[j]=sc.nextInt();
}
System.out.println(getMax(a,b,m));
}
}
public static int getMax(int[] a,int[] b,int m) {
int[] dpa=new int[m+1];
dpa[0]=0;dpa[1]=a[0];
int[] dpb=new int[m+1];
dpb[0]=0;dpb[1]=b[0];
for(int i=2;i<=m;i++) {
dpa[i]=a[i-1]+Math.max(dpa[i-1],dpb[i-2]);
dpb[i]=b[i-1]+Math.max(dpb[i-1],dpa[i-2]);
}
return Math.max(dpa[m],dpb[m]);
}
}
