7-9 学生成绩排序 (20分)
给出一组学生名单(姓名和成绩),请输出按成绩从大到小排序后的结果(名次和姓名)。成绩相同的人拥有相同的名次,且按姓名的字典序从小到大排列。题目保证学生姓名没有重复。
输入格式:
第一行给出不大于10000的整数N。 接下来N行,每行给出学生姓名和成绩,以空格分隔。学生姓名不超过20个字符。
输出格式:
共输出N行,每行包含对应的学生排名和姓名,以空格分隔。
输入样例:
7
KongDezhen 94
FuTaotao 93
HuYu 94
XuJiecen 94
WuSuqi 96
ChenDa 93
HuNianbo 95
输出样例:
1 WuSuqi
2 HuNianbo
3 HuYu
3 KongDezhen
3 XuJiecen
6 ChenDa
6 FuTaotao
最后一个点总是不能通过
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Linked l = new Linked();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String name = sc.next();
int grade = sc.nextInt();
char c = name.charAt(0);
Node node = new Node(name, grade, c);
l.add(node);
}
sc.close();
l.show();
}
}
class Linked {
Node head = new Node("", 0, ' ');
// 添加
public void add(Node node) {
// 看看头的下一个有没有元素
Node temp = head;
int node_grade = node.grade;
int node_name_firstC = node.c;
while (true) {
if (temp.next == null) {
temp.next = node;
return;
}
// 1:按照分数高低
if (node_grade > temp.next.grade) {
node.next = temp.next;
temp.next = node;
return;
// 分数相同看字母按照顺序排序
} else if (node_grade == temp.next.grade) {
if (node_name_firstC < temp.next.c) {
node.next = temp.next;
temp.next = node;
return;
}
}
temp = temp.next;
}
}
// 获取长度
public int getLength() {
int x = 0;
Node temp = head.next;
while (temp != null) {
x++;
temp = temp.next;
}
return x;
}
// 打印
public void show() {
Node temp = head.next;
int i = 1;// 并列名次
int t = 0;
int rank = 0;
int index = 1;
int cishu = 1;
while (temp != null) {
if (index != 1) {
if (cishu != getLength() - 1) {
if (temp.grade == t) {
rank++;
System.out.println(i + " " + temp.name);
} else {
t = temp.grade;
rank++;
i = rank;
System.out.println(i + " " + temp.name);
}
cishu++;
} else {
if (temp.grade == t) {
rank++;
System.out.print(i + " " + temp.name);
} else {
t = temp.grade;
rank++;
i = rank;
System.out.print(i + " " + temp.name);
}
}
} else {
index = 0;
System.out.println(i + " " + temp.name);
t = temp.grade;
rank++;
}
temp = temp.next;
}
}
}
class Node {
Node next;
String name;
int grade;
int c;
public Node(String name, int grade, char c) {
this.name = name;
this.grade = grade;
this.c = c;
}
}