C~K的班级
Time Limit: 1500MS
Memory Limit: 65536KB
Problem Description
经过不懈的努力,C~K终于当上了班主任。
现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个,
但是工作量太大了,所以找到了会编程的你,你能帮他解决这个问题吗?
Input
第一行输入一个N,代表C~K导出的名单共有N行(N<100000).
接下来的N行,每一行包括一个同学的信息,学号 姓名 年龄 性别。
Output
第一行输出一个n,代表删除重复名字后C~K的班级共有几人。
接下来的n行,输出每一个同学的信息,输出按照输入的顺序。
Example Input
6 0001 MeiK 20 M 0001 MeiK 20 M 0002 sdk2 21 M 0002 sdk2 21 M 0002 sdk2 21 M 0000 blf2 22 F
Example Output
3 0001 MeiK 20 M 0002 sdk2 21 M 0000 blf2 22 F
Hint
Author
C~K
题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/4069.html
本题考查java中的hashcode和equals,我们用eclipse默认的这两个方法就可以。
ps:作为出题人,心里很慌。。。
代码:
import java.util.*;
class Student{
int id;
String name;
int age;
String sex;
Student(int id,String name,int age,String sex){
this.id=id;
this.name=name;
this.age=age;
this.sex=sex;
}
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (sex == null) {
if (other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return true;
}
}
public class Main {
public static void main(String[] args){
Scanner read=new Scanner(System.in);
List<Student> list=new ArrayList<Student>();
int n=read.nextInt();
for(int i=0;i<n;i++){
int id=read.nextInt();
String name=read.next();
int age=read.nextInt();
String sex=read.next();
Student student=new Student(id,name,age,sex);
if(!list.contains(student))
list.add(student);
}
System.out.println(list.size());
Iterator<Student> it=list.iterator();
while(it.hasNext()){
Student p=it.next();
System.out.printf("%04d ",p.id);
System.out.print(p.name+" ");
System.out.print(p.age+" ");
System.out.println(p.sex);
}
}
}