携程2022年春招实习笔试经验~
在3月10日晚7:00 - 9:00期间参加了携程的笔试考试,这也是第一次参加这种类型的笔试,所以在这总结一下经验吧,之后可以按照这个经验再积极准备别的厂的面试。
个人面试感觉应该是无了,就是不知道携程有没有感谢信,先等一手
首先题型上:往年携程是20 + 3的模式(20道选择题,3道编程题),今年改成了4道编程题,限时两个小时。
第一道是一个数组的规划问题,要求是运算符号两边要格式化,改成只有一个空格的格式化输出模式,用例如下所示:
用例1:dasds < sadasda
用例2: w < v
用例3: fsfsdfsdf> sadas
第二道题是一个不算很难的数组相乘问题,但是我考虑的过于麻烦😂,倒是在这个题目上面花费了相当多的时间,大概意思是: 一个孩子,上课没有听课,因此他理解的乘法是这样的
1 2 3
3 2 1
——
1 2 3
2 4 6
3 6 9
——
7 3 8
然后要求的输入用例为:
3
123 321
111
100 21
这个题目的解法还算是比较简单,只要将一个数字分离开来,比如将321分成arrays[0] = 3 arrays[1] = 2 arrays[2] = 1
然后依次与第一个操作数相乘,再相加到一起即可完成要求:
第三题不记得了,哈哈哈,因为属实没啥思路,就直接跳过了~
然后第四题的话是一个回文数的问题,这个题因为卡在了最后的时限,所以导致没能提交成功,(应该是系统卡了,我在本地IDE上运行速度还是挺快的),因此直接将答案贴在这里,感兴趣大家可以去了解一下~
import java.util.Scanner;
public class Question4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] strings = str.split(" ");
int a = Integer.parseInt(strings[0]);
int b = Integer.parseInt(strings[1]);
str = scanner.nextLine();
strings = str.split(" ");
int year = Integer.parseInt(strings[0]);
int mounth = Integer.parseInt(strings[1]);
int day = Integer.parseInt(strings[2]);
int result = combinData(year,mounth,day);
while(isAimedNumber(result) != true){
day = day + 1;
if(day > b){
mounth++;
day = 1;
}
if(mounth > a){
year++;
mounth = 1;
}
result = combinData(year,mounth,day);
}
int tempA = result;
int gridB = 1;
for(int i = 0 ; i < highestNum(mounth) + highestNum(day) ; i++){
tempA = tempA / 10;
gridB = gridB * 10;
}
year = tempA;
int tempB = result;
tempB = tempB % gridB;
tempB /= 10;
mounth = tempB;
day = result % 10;
System.out.println(year + " " + mounth + " " + day);
}
//把年月日组合到一起
private static int combinData(int year, int mounth, int day){
int result = 0;
for(int i = 0 ; i < highestNum(mounth) + highestNum(day) ; i++){
year = year * 10;
}
result = result + year;
for(int i = 0 ; i < highestNum(day) ; i++){
mounth = mounth * 10;
}
result = result + mounth + day;
return result;
}
//把年月日拆分开
//计算数字的最高位
private static int highestNum(int a){
int result = 0;
while(a / 10 > 0){
result++;
a = a / 10;
}
return result + 1;
}
//判断该数字是否为回文数字
private static boolean isAimedNumber(int temp){
if(temp < 0 || (temp % 10 == 0 && temp!= 0)){
return false;
}
int revertedNumber = 0;
while(temp > revertedNumber){
revertedNumber = revertedNumber * 10 + temp % 10;
temp /= 10;
}
return temp == revertedNumber || temp == revertedNumber / 10;
}
}