《Java程序设计》实验6

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();
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值