73 多级排序
作者: zzp时间限制: 1S章节: 结构体
问题描述 :
本学期大家学习了C语言程序设计,现在需要你实现一个成绩排名系统。
假设他们每个人都有三门课程,C语言程序设计、计算机导论和英语,要求把成绩好的同学放到前面。
具体要求是先按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的C语言程序设计成绩进行排名,如果总成绩和C语言程序设计成绩都相同时,则再按照他们的计算机导论成绩进行排名(输入的数据保证这两个人的计算机导论成绩不会再相同)。try to do it _!
输入说明 :
输入多组数据。
每组数据的第一行为学生的数目N(N<=100),接下来的N行,每行输入一个学生的信息,包括:学生姓名(长度小于20)、C语言程序设计成绩(0到100的整数)、计算机导论成绩(0到100的整数)和英语成绩(0到100的整数)。
每两个数据之间有一个空格,学生姓名中不包含空格。
输出说明 :
对于每组输入,输出按照成绩从高到低排序的姓名、总分、C语言程序设计、计算机导论和英语成绩序列,每个学生占一行。
我们保证不会存在两个人总成绩和各门的成绩都分别相同的情况。
两组输出数据之间有一个空行,第一组数据前面及最后一组数据后面无空行。
输入范例 :
3
Henry 98 95 90
Marry 90 88 89
Jhon 92 90 95
3
zhangsan 90 90 90
lisi 85 95 90
wangwu 85 90 95
输出范例 :
Henry 283 98 95 90
Jhon 277 92 90 95
Marry 267 90 88 89
zhangsan 270 90 90 90
lisi 270 85 95 90
wangwu 270 85 90 95
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
public class test_73 {
/**
* 73 多级排序
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum, n = 0;
String trim;
String[] temp, split, next;
StringBuilder builder = new StringBuilder();
ArrayList<String[]> lists = new ArrayList<>();
//存数据
while (sc.hasNext()) {
if (n != 0) {
System.out.println();
}
n = sc.nextInt();
sc.nextLine();
for (int i = 0; i < n; i++) {
sum = 0;
trim = sc.nextLine().trim();
split = trim.split(" ");
for (int j = 1; j < split.length; j++) {
sum += Integer.valueOf(split[j]);
}
temp = builder.append(split[0]).append(" ").append(sum).append(trim.substring(trim.indexOf(" "))).toString().split(" ");
lists.add(temp);
builder.setLength(0);
}
//排序
lists.sort(new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
if(Integer.valueOf(o2[1]) - Integer.valueOf(o1[1])!=0){
return Integer.valueOf(o2[1]) - Integer.valueOf(o1[1]);
}
if(Integer.valueOf(o2[2]) - Integer.valueOf(o1[2])!=0){
return Integer.valueOf(o2[2]) - Integer.valueOf(o1[2]);
}
return Integer.valueOf(o2[3]) - Integer.valueOf(o1[3]);
}
});
Iterator<String[]> iterator = lists.iterator();
while (iterator.hasNext()) {
next = iterator.next();
for (int i = 0; i < next.length; i++) {
if (i != next.length - 1) {
builder.append(next[i]).append(" ");
} else {
builder.append(next[i]);
}
}
System.out.println(builder.toString());
iterator.remove();
builder.setLength(0);
}
}
}
}