牛客网华为机试【成绩排序】
程序员文章站
2024-03-11 22:11:31
...
题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
注:0代表从高到低,1代表从低到高
输入描述:
输入多行,先输入要排序的人的个数,然后分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例
输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50
题目分析
既然是个排序,那么可以封装成一个简单的对象(User),然后可以使用好多种排序方法(比如:Arrays.sort()、Collections.sort()、TreeSet等)。
我这里使用的是Arrays.sort方法,自定义比较器。
java代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
/**
* 成绩排序
*/
public class Main {
// 自定义实体类
private static class User {
String name;
Integer score;
User (String name, Integer score){
this.name = name;
this.score = score;
}
@Override
public String toString() {
return name + " " + score;
}
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String string;
while((string = reader.readLine()) != null){
// 数目
int count = Integer.parseInt(string);
// 降序:0,升序:1
int sortFlag = Integer.parseInt(reader.readLine());
// 存储
User[] users = new User[count];
for (int i = 0; i < count; i++) {
String[] line = reader.readLine().split(" ");
users[i] = new User(line[0], Integer.parseInt(line[1]));
}
// 排序
if(sortFlag == 1){
Arrays.sort(users, Comparator.comparingInt(o -> o.score));
} else {
Arrays.sort(users, (o1, o2) -> o2.score - o1.score);
}
// 打印
for (User user : users) {
System.out.println(user);
}
}
}
}