携程测开笔试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)); } } }