2021 字节测试开发岗 笔试编程题1
秋招已经开始了,之前师姐去面了字节的测试开发岗,记录一下她笔试的编程题:
题目描述:
某特种部队采用了一套性格密码机制来筛选执行特定任务的最佳士兵,该机制规则如下:
1.每个人的性格可以从M个维度来描述,每个维度分为ABCDE5种类型;
2.同一维度内字母距离越近,表示该维度性格类型差异越小,也越匹配,比如:A和B差异为1,A和D差异为3,所以A和B性格类型越匹配。
3.其中AE,BD,CE,BE为不相容类型,可以认为他们性格差异为正无穷。
4.如果两个士兵的性格密码在M个维度下性格类型差异值总和越小,代表这两人性格越匹配,但如果某一维度包含不相容类型,则两人性格密码完全不匹配。
假如你是该特征部队技术负责人,现有一项机密任务,需要在N个特种兵种,找到最匹配该任务的性格密码的人选,请写一套算法帮助他们找到该任务的最佳人选。
这道题算是easy题了,写了个大概写法(暴力),因为没有测试用例,也不能保证完全正确。
public static int BestMatchsoldier(String [] soldierstemoper,int N,int M,String task) { int soldier=-1; int maxMatch=Integer.MAX_VALUE; for(int i=0;i<N;i++) { int soldierNum=0; for(int j=0;j<M;j++) { String temp=Character.toString(soldierstemoper[i].charAt(j))+task.charAt(j); if((temp.contains("A")&&temp.contains("E"))||(temp.contains("B")&&temp.contains("D"))|| (temp.contains("C")&&temp.contains("E"))|| (temp.contains("B")&&temp.contains("E"))) { soldierNum=Integer.MAX_VALUE; break; } soldierNum+=Math.abs(soldierstemoper[i].charAt(j)-task.charAt(j)); } if(soldierNum<maxMatch) { maxMatch=soldierNum; soldier=i; } } return soldier; } public static void main(String [] s){ String [] soldierstemoper={ "ABDDC","EACDB","CDCDE","DCAEC","ECABD","BDCAE","ABDDC" ,"ABCDD", //士兵的测试数据 }; int BestMatchSoilder=BestMatchsoldier(soldierstemoper,8,5,"ABCDE"); //输入的测试数据 System.out.print(BestMatchSoilder==-1?"都不合适":BestMatchSoilder); }