携程测开笔试20220830
我只是个测开,为什么要出4道算法题为难我,我的试卷上赫然写着——开发岗!
1、重组偶数
输入
3 13 123 24输出
-1 132 24代码(交卷后又改的,之前没a)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a =new int[n];
for(int i = 0; i < n; i++){
a[i] = sc.nextInt();
}
for(int i = 0; i < n; i++){
if(a[i]%2==0){
System.out.println(a[i]);
}else {
int flag=f(a[i]);
if(flag==-1){
System.out.println(-1);
}
else{
String newNum="";
StringBuilder sb=new StringBuilder();
String s=String.valueOf(a[i]);
for(int j=0;j<s.length();j++){
if(j==flag){
sb.append(s,0,j);
sb.append(s,j+1,s.length());
sb.append(s.charAt(flag));
System.out.println(sb.toString());
}
}
}
}
}
}
public static int f(int num){
String s=String.valueOf(num);
for(int i=0;i<s.length();i++){
if((int)s.charAt(i)%2==0 && (int)s.charAt(i+1)!=0){
return i;
}
if((int)s.charAt(i)==0){
return i;
}
}
return -1;
}
} 2、you 不难,但我写的不够简单(100%)
输入
3 1 1 1 2 3 2 1 5 2输出
2 4 5
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int score;
int[][] a =new int[n][3];
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
a[i][j]=sc.nextInt();
}
}
for(int i=0;i<n;i++){
score=0;
int minn=Math.min(Math.min(a[i][0],a[i][1]),a[i][2]);
score+=minn*2;
a[i][1]-=minn;
if(a[i][1]>1) score+=a[i][1]-1;
System.out.println(score);
}
}
} 4、平滑数列(11%)能力确实不行 输入
3 1 3 4输出
1
import java.util.*;
public class Main3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a=new int[n];
for(int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
if(n==2){
System.out.println(0);
}else{
int max=0,index=0;
List<Integer> list=new ArrayList<>();
for(int i=1;i<n;i++){
if(max<Math.abs(a[i]-a[i-1])){
max=a[i];
index=i;
}
list.add(Math.abs(a[i]-a[i-1]));
}
Collections.sort(list);
System.out.println(list.get(n-3));
}
}
} 