最右笔试-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]); } }