首页 > 试题广场 >

List Grades (25)

[编程题]List Grades (25)
  • 热度指数:3253 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
Given a list of N student records with name, ID and grade. You are supposed to sort the records with respect to the grade in non-increasing order, and output those student records of which the grades are in a given interval.

输入描述:
Each input file contains one test case.  Each case is given in the following format:
N
name[1] ID[1] grade[1]
name[2] ID[2] grade[2]
... ...
name[N] ID[N] grade[N]
grade1 grade2
where name[i] and ID[i] are strings of no more than 10 characters with no space, grade[i] is an integer in [0, 100], grade1 and grade2 are the boundaries of the grade's interval. It is guaranteed that all the grades are distinct.


输出描述:
For each test case you should output the student records of which the grades are in the given interval [grade1, grade2] and are in non-increasing order.  Each student record occupies a line with the student's name and ID, separated by one space.  If there is no student's grade in that interval, output "NONE" instead.
示例1

输入

4
Tom CS000001 59
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
60 100

输出

Mike CS991301
Mary EE990830
Joe Math990112
推荐
本题主要是考察对结构体或者类的排序
在Java中,类实现Comparable接口,既可以对该类型的对象进行排序,排序的条件自己可以在接口的compareTo方法中实现,这里是对成绩的排序,代码如下
	public static class Student implements Comparable<Student> {
		String id, name;
		int grade;

		public Student(String id, String name, int grade) {
			this.id = id;
			this.name = name;
			this.grade = grade;
		}

		@Override
		public int compareTo(Student stu) {
			return stu.grade - grade;
		}

		public int print(int grade1,int grade2){
			if(grade>=grade1 && grade<=grade2){
				System.out.println(name +" "+ id);
				return 1;
			}
			return 0;
		}
	}
把每个学生的信息保存到Student对象中,并把该对象加入链表中,最后对链表排序,遍历链表并调用print方法即可。另外,还要注意如果没有满足条件的学生,输出NONE。

完整代码如下
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static Scanner in = new Scanner(System.in);
	public static PrintStream out = System.out;

	public static class Student implements Comparable<Student> {
		String id, name;
		int grade;

		public Student(String id, String name, int grade) {
			this.id = id;
			this.name = name;
			this.grade = grade;
		}

		@Override
		public int compareTo(Student stu) {
			return stu.grade - grade;
		}
		public int print(int grade1,int grade2){
			if(grade>=grade1 && grade<=grade2){
				System.out.println(name +" "+ id);
				return 1;
			}
			return 0;
		}
	}

	public static void main(String[] args) {
		int N = in.nextInt();
		List<Student> list = new ArrayList<Student>();
		for(int i=0;i<N;++i){
			String name = in.next();
			String id = in.next();
			int grade = in.nextInt();
			Student stu = new Student(id, name, grade);
			list.add(stu);
		}
		
		int grade1,grade2;
		grade1=in.nextInt();
		grade2=in.nextInt();
		Collections.sort(list);
		
		int count = 0;
		for(int i=0;i<N;++i){
			count+=((Student)list.get(i)).print(grade1,grade2);
		}
		if(count==0)
			System.out.println("NONE");
	}
}

编辑于 2015-08-17 20:20:41 回复(0)