6-1 教师、学生排序
分数 20
全屏浏览题目
作者 孙晨霞
单位 河北农业大学
已知Main类、Person类的设计,完成Student类,Teacher类、MyTool类的设计。
函数接口定义:
class Student extends Person{ } class Teacher extends Person{ } class MyTool{ public static void separateStu_T(List persons,List teachers,List students){} }
Student类继承了Person,拥有私有属性int类型的sno和String类型的major,分别代表学号与所学专业;提供对应的set,get方法;比较方法完成按照学号比较。
Teacher类继承了Person,拥有私有属性int类型的tno和String类型的subject,分别代表教师编号与所授科目;提供对应的set,get方法;比较方法完成按年龄比较。
MyTool类中提供方法public static void separateStu_T(List persons,List teachers,List students){},方法 separateStu_T的功能是将persons线性表中的 teacher,student分别放到teachers,students两个线性表中。裁判测试程序样例:
import java.util.*; public class Main { public static void main(String[] args) { List persons=getPersons(); //得到一个所有人的线性表 List teachers=new ArrayList(); List students=new ArrayList(); MyTool.separateStu_T( persons,teachers,students); //将persons线性表中的 teacher,student分别放到teachers,students两个线性表中 Collections.sort(teachers); //对教师线性表排序 Collections.sort(students); //对学生线性表排序 showResult(teachers); //显示教师线性表排序以后的结果 showResult(students); //显示学生线性表排序以后的结果 } public static List getPersons() { List persons=new ArrayList(); Scanner in=new Scanner(System.in); Person person=null; int num=Integer.parseInt(in.nextLine()); for(int i=0;i<num;i++) { String str=in.nextLine(); String []data=str.split(","); if(data[0].equalsIgnoreCase("student")) person=new Student(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]); else if (data[0].equalsIgnoreCase("teacher")) person=new Teacher(Integer.parseInt(data[1]),data[2],data[3],Integer.parseInt(data[4]),data[5]); else person=null; persons.add(person); } return persons; } public static void showResult(List persons) { for(int i=0;i<persons.size();i++) { Person per=(Person)persons.get(i); System.out.println(per.getName()+","+per.getGender()+","+per.getAge()); } } } abstract class Person implements Comparable { private String name; private String gender; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, String gender, int age) { super(); this.name = name; this.gender = gender; this.age = age; } } /* 请在这里写你的代码 */
输入样例:
输入的第一行是总人数n,紧跟着输入n行,每一行代表一个人的信息。下面的例子中n=5,输入了5个人的信息。
5 student,1001,Tom1,female,18,computer teacher,2001,Jake1,female,35,datastructer student,1002,Tom2,male,19,computer student,1003,Tom3,female,20,software teacher,2002,Jake2,female,33,database
输出样例:
注意:本样例输出结果中两名教师是按照年龄升序排序的,三名学生是按照学号降序排序的。
Jake2,female,33 Jake1,female,35 Tom3,female,20 Tom2,male,19 Tom1,female,18
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
class Student extends Person { private int sno; private String major; Student(int sno,String name, String gender,int age,String major) { super(name,gender,age); this.sno = sno; this.major = major; } public void setSno(int sno) { this.sno = sno; } public int getSno() { return sno; } public void setMajor(String major) { this.major = major; } public String getMajor() { return major; } public int compareTo(Object obj) { Student other = (Student)obj; if(this.sno==other.sno) return 0; else if(this.sno>other.sno) return -1; else return 1; } } class Teacher extends Person { private int tno; private String subject; Teacher(int tno,String name,String gender,int age,String subject) { super(name,gender,age); this.tno = tno; this.subject = subject; } public void setTno(int tno) { this.tno = tno; } public int getTno() { return tno; } public void setSubject(String subject) { this.subject = subject; } public String getSubject() { return subject; } public int getAge() { return super.getAge(); } public int compareTo(Object obj) { Teacher other = (Teacher)obj; if(this.getAge()==other.getAge()) return 0; else if(this.getAge()>other.getAge()) return 1; else return -1; } } class MyTool { public static void separateStu_T(List persons,List teachers,List students) { for(int i=0;i<persons.size();i++) { if(persons.get(i) instanceof Student) { Student s = (Student)persons.get(i); students.add(s); } else { Teacher t = (Teacher) persons.get(i); teachers.add(t); } } } }
7-1 office文档页码打印
分数 20
全屏浏览题目
切换布局
作者 黄敏
单位 河北科技大学
在office软件(word,excel)中,有时只需要打印整个文档中的一部分,就需要用户选择需要打印的页码范围。目前输入的页码范围格式定义为:以逗号分割,可以使用-表示连续页码。例如:1,3,5-9,20。表示需要打印的页码为1,3,5,6,7,8,9,20。
本题目要求读入一行字符串,作为需要打印的页码范围。需要注意以下几点:
- 1、页码范围输入可以不按顺序。例如:5,3,7,9-10,1-2;
- 2、连续的页码定义也可能不会按照由小到大的顺序输入。例如:1,9,5,20-15,10;
- 3、输入的页码范围可能会有重复。例如:1,9,15,5-10,12-20;
输入格式:
第一行:表示页码范围的格式化字符串
输出格式:
将需要打印的页码按照由小到大的顺序输出,以空格分割
输入样例:
1,3,5-9,20
输出样例:
1 3 5 6 7 8 9 20
输入样例:
12-20,1,15,9,5-10
输出样例:
1 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); String str=in.nextLine(); String[] s=str.split(","); judge jj=new judge(); Set<Integer> ss=new HashSet<Integer>(); for(int i=0;i<s.length;i++) { if(jj.isNum(s[i])){ ss.add(jj.toNum(s[i])); }else { String[] pp=s[i].split("-"); int low=jj.toNum(pp[0]); int high=jj.toNum(pp[1]); if(low>high) { int temp=low; low=high; high=temp; } for(int iii=low;iii<=high;iii++) { ss.add(iii); } } } int real=0; int[] aaa=new int[ss.size()]; for(Integer i:ss) { aaa[real++]=i.intValue(); } Arrays.sort(aaa); int flag=0; for(int j=0;j<aaa.length;j++) { if(flag==1) { System.out.print(" "+aaa[j]); }else { flag=1; System.out.print(aaa[j]); } } } } class judge{ public judge() { } public boolean isNum(String s) { for(int i=0;i<s.length();i++) { if(!(s.charAt(i)>='0'&&s.charAt(i)<='9')) { return false; } } return true; } public int toNum(String s) { int sum=0; for(int i=0;i<s.length();i++) { sum=(s.charAt(i)-'0')+sum*10; } return sum; } }
7-2 sdut-Colleciton-5 学生信息的添加与查询(HashMap)
分数 20
全屏浏览题目
切换布局
作者 周雪芹
单位 山东理工大学
设计一个学生信息添加和查询的系统,从键盘读入学生的数据,然后通过屏幕进行显示。
输入格式:
第一行有1个整数N,表示学生数量;
接下来有N行学生数据,分别表示学生的id(编号)、name(姓名)、birthday(生日)、score(成绩)属性的值,关键字(id)相同的记录代表同一个学生(如果id相同,后来读入的学生信息会覆盖已有的学生信息)
输出格式:
按照id从小到大的顺序,输出所有学生的属性名称及属性值,其中score(成绩)保留1位有效数字,具体输出格式见输出样例。
提示:可以利用Student类的toString()方法来实现类对象属性的展示。
输入样例:
5 0001 Mike 1990-05-20 98.5 0002 John 1992-05-20 67 0003 Hill 1994-05-20 36.5 0004 Christ 1996-05-20 86.5 0001 Jack 1998-05-20 96
输出样例:
Student [id=0001, name=Jack, birthday=1998年05月20日, score=96.0] Student [id=0002, name=John, birthday=1992年05月20日, score=67.0] Student [id=0003, name=Hill, birthday=1994年05月20日, score=36.5] Student [id=0004, name=Christ, birthday=1996年05月20日, score=86.5]
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
import java.util.*; import java.util.Map.Entry; class student{ String s,b,id; double n; student(String s1,String s2,double s3,String s4){ s=s1; b=s2; n=s3; id=s4; } @Override public String toString() { return "Student [id=" + id + ", name=" + s + ", birthday=" + b + ", score=" + n + "]"; } } public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n=sc.nextInt(); Map<String,student> mp=new TreeMap<String, student>(); while(n!=0) { n--; String s=sc.next(); String name=sc.next(); String b=sc.next(); //System.out.println(b.charAt(0)); String c=""+b.charAt(0)+b.charAt(1)+b.charAt(2)+b.charAt(3)+"年"+b.charAt(5)+b.charAt(6) +"月"+b.charAt(8)+b.charAt(9)+"日"; double s3=sc.nextDouble(); student st=new student(name,c,s3,s); mp.put(s, st); } Iterator it=mp.entrySet().iterator(); while(it.hasNext()) { Entry ex=(Entry)it.next(); System.out.println(ex.getValue().toString()); } } }
7-3 出勤统计
分数 20
全屏浏览题目
切换布局
作者 大数据2021
单位 山东科技大学
某公司现需要统计员工出勤次数,具体要求如下:
输入样例:
Mark Tom Ivor Mark Ivor Mark Jack end
输入样例解释:
每行表示某天出勤的员工名单,以空格间隔。
end表示输入结束输出样例:
Mark 3 Ivor 2 Tom 1 Jack 1
输出样例解释:
按出勤天数倒序输出,若出勤次数相同则按输入顺序输出(即先输入的先输出,样例中Tom比Jack先输入,因此先输出Tom)。每名员工占一行,格式为员工名+空格+出勤次数
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
import java.util.*; import java.util.Map.Entry; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Map<String,Integer> map = new LinkedHashMap<String,Integer>(); while(scanner.hasNext()) { String[] str = scanner.nextLine().split(" "); if(str[0].equals("end")) break; for(int i = 0; i < str.length; i++) { int count = map.getOrDefault(str[i], 0);//获取指定位置键的值getOrDefault()函数 map.put(str[i], count+1); } } List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer> >(); list.addAll(map.entrySet()); Collections.sort(list,new SortByValue()); for(Map.Entry<String,Integer> entry:list) { System.out.println(entry.getKey()+" "+entry.getValue()); } } } class SortByValue implements Comparator<Map.Entry<String,Integer>> { @Override public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { // TODO Auto-generated method stub return o2.getValue().compareTo(o1.getValue()); } }
7-4 评委打分
分数 20
全屏浏览题目
切换布局
作者 翁恺
单位 浙江大学
班级里要搞智力竞赛啦!同学们都踊跃参加。进入最后决赛的是10个同学,随着一道道题目的出示,有时是1号选手得分,有时是5号选手得分,每次答对者得10分,最后结果如何呢?
输入格式:
第一行有十个整数,表示十位同学的初始分。第二行一个整数n,表示有n道题竞赛。
接下去有n行,每行有一个数字x,x表示本次可以加分的选手序号(每次答对者得10分)。输出格式:
10个同学最终的得分值,每两位同学之间有一个空格。
输入样例:
10 0 0 0 10 10 0 0 0 10 3 1 10 1
输出样例:
30 0 0 0 10 10 0 0 0 20
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] a = new int[10]; for (int i = 0; i < 10; i++) { a[i] = in.nextInt(); } int n = in.nextInt(); int[] b = new int[n]; for (int i = 0; i < n; i++) { b[i] = in.nextInt(); a[b[i]-1]+=10; } for (int i = 0; i < a.length; i++) { if (i == 0) { System.out.print(a[i]); } else { System.out.print(" " + a[i]); } } in.close(); } }