导航菜单
首页 >  ADE开发工程师考试  > 电信L1研发工程师

电信L1研发工程师

注意事项:

题目分为单选,多选、判断和编程,60分过

编程题目1,严格按照题目提示编程。比如 定义一个公共类Main和静态方法mainpublic class Main{public static void main(String[] args){ //这里开始写程序}}2.不要带有包名3.严格按照提示的输入和输出定义函数的输入输出,千万不要随意输出,因为任何的输出到屏幕都会作为您答案的一部分;比如:题目提示会自动输入3,输出a->ba->c

因此编程如下public class Main{public static void main(String[] args){ Scanner in=new Scanner(System.in);int n=in.nextInt();//此时输入n=3System.out.println("a->b");//此时输出a->b并回车System.out.println("a->c");}}

之后测试程序会自动向程序输入3,并查看输出是否为a->ba->c如果是表示编程正确4.只允许标准输入输出,不允许读写文件5.不要引用不必要的头文件或命名空间。6.编程程序运行在linux下因此要遵守linux特性,比如大小写敏感、回车只有一个\n7.可以多次提交编程,实时评测结果8.使用多个搜索引擎和使用关键字比如题目是xxxxxxx instrumentation harvester watch 和 notification xxxxxxx,其他都是中文,如果直接搜索不到答案,因此只搜索英文搜索关键字就是instrumentation harvester watch notification如果百度搜索不到还有so、搜狗、bing、google9.一个文件可以有多个类但是必须有且仅有一个public类作为入口10.考试范围主要是java基础,个别几道涉及java框架会有点难度,编程题目考察常见算法和库比如汉诺塔、排序、斐波那契数列等等

 

题库:

编程题

题目一、汉诺塔,三个步骤,两个递归,分而治之

import java.io.*;import java.util.*;public class Main{public static void main(String[] args){Scanner in=new Scanner(System.in);int n=in.nextInt();h(n,'a','b','c');}public static void h(int n, char a,char b,char c){if(n==1){ System.out.println(a+"->"+c);}else{h(n-1,a,c,b);//1.a到b柱子System.out.println(a+"->"+c);//2.a到c柱子h(n-1,b,a,c);//3.b到c柱子}}}

 

题目二、某公司要针对员工情况统一调薪,现有一个员工列表,包含姓名、职级、工作年限、工资信息。现要求将该列表按以下规则重新排序:

1、职级高的排在前面

2、若职级相同,按工资少的排前面

3、若工资相同,工作年限长的排前面

输入描述:

第一行输入一个整数n,表示员工列表中员工的人数

接下来的n行,分别输入员工的姓名、职级、工作年限和工资信息,各项信息用空格分隔

输出描述:

输出按要求重新排列的员工列表,每名员工信息(姓名、职级、工作年限和工资)占一行

示例

输入:

6张三 3 3 3000李四 3 4 3000王五 3 3 4000赵六 4 3 3000陆奇 4 4 4000闫八 4 4 3980.99

输出:

赵六 4 3 3000.00闫八 4 4 3980.99陆奇 4 4 4000.00李四 3 4 3000.00张三 3 3 3000.00王五 3 3 4000.00

java编程,排序对象,三个步骤,创建arraylist,创建比较器,arraylist调用sort方法传入比较器import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Scanner;

public class PrintEmployee {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List el = new ArrayList();int n = scanner.nextInt();for (int i = 0; i < n; i++) {//接收n个员工并保存到ALEmployee e = new Employee();e.setName(scanner.next());e.setLevel(scanner.nextInt());e.setWorkTime(scanner.nextInt());e.setSalary(scanner.nextInt());el.add(e);}Order(el);//开始排序}

private static void Order(List el) {Comparator lc = Comparator.comparing(Employee::getLevel).reversed();Comparator wc = Comparator.comparing(Employee::getWorkTime).reversed();Comparator sc = Comparator.comparing(Employee::getSalary).reversed();el.sort(lc.thenComparing(sc).thenComparing(wc));for (Employee e : el) {System.out.println(e);}}}

class Employee {private String name;private Integer level;private Integer workTime;private Integer salary;

public Employee(String name, Integer level, Integer workTime, Integer salary) {this.name = name;this.level = level;this.workTime = workTime;this.salary = salary;}

public Employee() {}

public String getName() {return name;}

public void setName(String name) {this.name = name;}

public Integer getLevel() {return level;}

public void setLevel(Integer level) {this.level = level;}

public Integer getWorkTime() {return workTime;}

public void setWorkTime(Integer workTime) {this.workTime = workTime;}

public Integer getSalary() {return salary;}

public void setSalary(Integer salary) {this.salary = salary;}

@Overridepublic String toString() {return name + " " + level + " " + workTime + " " + salary;}}

 

注意:JAVA comparator在实际开发中,我们经常会遇到需要排序的情况。在正常是用java Sort时需要提供一个comparator,但是有时因为有空指针所以会报错,所以这时我们就需要是用comparator提供的nullLast和nullFirst方法。

Comparator我们先介绍一下comparator,我们后文称为比较器。比较器实际上是一个实现了comparator interface是一个实例,在Arrays.sort方法我们可以提供这样一个实例,即使被排序的object没有实现comparable接口,我们也可以排序了。构建comparator实例的方法有很多,这里介绍我个人比较喜欢的通过Comparator提供的静态方法来创建实例的方法。我们使用一个类Person举例,Pesron有着3个成员变量,firstName, middleName, lastName,都是String类型。如果我们想要对一个Pesron[] array通过firstName的字符顺序排序,我们可以写成 Arrays.sort(arrays, Comparator.comparing(Person::getFirstName)), 在这里,comparing方法就会返回一个comparator的实例。这里的comparing方法需要一个参数,叫做键提取器,他将类型T映射为一个可以比较的类型(在这里,是String),然后每次比较时就通过映射过来的键来排序。再打个比方,如果我们想通过firstName的长度排序,我们就可以写成Arrays.sort(arrays, Comparator.comparing(x -> x.getFirstName().length())),其中x->x.getFirstName() 等价于 Person::getFirstName, 一个是lambda表达式,一个是方法引用。不过其实,在上面的俩个例子中都存在着问题,我们都没有考虑到数组中存在null的情况,一旦数组中存在null,这个方法就会报错。所以这时就需要nullLast和nullFirst方法。

nullLast, nullFirstnullLast需要传递一个comparator实例,每次comparator在比较时,会把null放在排序的最后而不会报错(实际上就是null和其他任何值比较都会返回-1),然后nullLast会返回一个comparator实例。所以上面的代码写成Arrays.sort(arrays, nullsLast(Comparator.comparing(aw -> aw.getFirstName())))就可以了

python解决方法仅供参考

方法一:

n = int(input())emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in(input().strip().split(" ") for i in range(n))]

emps=sorted(emps,key=lambda x:(x[1],-x[3],x[2]), reverse=True)

for emp in emps:print("{} {} {} {:.2f}".format(*emp)) 方法二:

import sys

lines=sys.stdin.readlines()n=int(lines[0].strip())emps=[]for i in range(n):tmp=lines[i+1].strip().split(" ")tmp[0]=tmp[0].strip()tmp[1]=int(tmp[1])tmp[2]=int(tmp[2])tmp[3]=-float(tmp[3])emps.append(tmp)

emps=sorted(emps,key=lambda x:(x[1],x[3],x[2]), reverse=True)

for emp in emps:emp[-1]=-emp[-1]print("{} {} {} {:.2f}".format(*emp))方法三:

n = int(input())emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in(input().strip().split(" ") for i in range(n))]

#基数排序result = sorted(emps, key=lambda x: -x[2])result = sorted(result, key=lambda x: x[3])emps = sorted(result, key=lambda x: -x[1])

for emp in emps:print("{} {} {} {:.2f}".format(*emp))方法四:

n = int(input())emps = [[emp[0],int(emp[1]),int(emp[2]),float(emp[3])] for emp in(input().strip().split(" ") for i in range(n))]

for i in range(n):for j in range(n-i-1):if emps[j+1][1]emps[j][1]:emps[j], emps[j+1] = emps[j+1], emps[j]else:if float(emps[j+1][3])>float(emps[j][3]):continueelif float(emps[j+1][3])int(emps[j][2]):emps[j], emps[j+1] = emps[j+1], emps[j]else:continue

for emp in emps:print("{} {} {} {:.2f}".format(*emp))

 

 

【程序1】   //这是一个菲波拉契数列问题题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   

public class lianxi01 {public static void main(String[] args) {System.out.println("第1个月的兔子对数:    1");System.out.println("第2个月的兔子对数:    1");int f1 = 1, f2 = 1, f, M=24;//注意,f1 、f2是兔子的对数、m是月份、f是中间变量     for(int i=3; i= 90 ? 'A'           : x >= 60 ? 'B'           :'C';    System.out.println("等级为:"+grade);  }} 【程序6】   题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   /**在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* /import java.util.*;public    class     lianxi06     { public static void main(String[] args) {int     a ,b,m;Scanner s = new Scanner(System.in);System.out.print( "键入一个整数: "); a = s.nextInt();System.out.print( "再键入一个整数: "); b = s.nextInt();      deff cd = new deff();      m = cd.deff(a,b);      int n = a * b / m;      System.out.println("最大公约数: " + m);      System.out.println("最小公倍数: " + n);} }class deff{public int deff(int x, int y) {     int t;     if(x < y) {      t = x;      x = y;      y = t;     }       while(y != 0) {      if(x == y) return x;      else {       int k = x % y;       x = y;       y = k;      }     }     return x;}} 【程序7】   题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   import java.util.*;public class lianxi07 {public static void main(String[] args) {int digital = 0;int character = 0;int other = 0;int blank = 0;     char[] ch = null;     Scanner sc = new Scanner(System.in);     String s = sc.nextLine();     ch = s.toCharArray();     for(int i=0; i= '0' && ch[i] = 'a' && ch 'A' && ch[i]  0 && x 10 && x 20 && x 40 && x 60 && x 100) {      y = 20 * 0.175 + 40 * 0.08 + 40 * 0.015 + (x - 100) * 0.01;     }     System.out.println("应该提取的奖金是 " + y + "万");}}

【程序13】   题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?   public class lianxi13 {public static void main(String[] args) {     for(int x =1; x 12 || day < 0 || day > 31) {

     System.out.println("输入错误,请重新输入!");

     e=1 ;

     }

     }while( e==1);

      for (int i=1; i y) {

int t = x;

x = y;

y = t;

}

if(x > z) {

int t = x;

x = z;

z = t;

}

if(y > z) {

 

int t = y;

y = z;

z = t;

 

 

}

 

System.out.println( "三个数字由小到大排列为: "+x + " " + y + " " + z);

}

 

 

}

class input{

public int input() {

int value = 0;

Scanner s = new Scanner(System.in);

value = s.nextInt();

return value;

}

}

【程序16】题目:输出9*9口诀。     public class lianxi16 {public static void main(String[] args) {     for(int i=1; i

相关推荐: