题目
读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含1个测试用例,格式为
第1行:正整数n
第2行:第1个学生的姓名 学号 成绩
第3行:第2个学生的姓名 学号 成绩
... ... ...
第n+1行:第n个学生的姓名 学号 成绩
其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每个测试用例输出2行,第1行是成绩最高学生的姓名和学号,第2行是成绩最低学生的姓名和学号,字符串间有1空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95输出样例:
Mike CS991301
Joe Math990112
解析
排序下,找出来最大最小的即可
代码
C++解法
#include <algorithm> #include <cstdio> const int maxn = 105; struct Node { char name[maxn]; char id[maxn]; int score; void input() { scanf("%s%s%d", name, id, &score); } void print() { printf("%s %s\n", name, id); } bool operator<(const Node &rhs) const { return score > rhs.score; } }; Node student[maxn]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) student[i].input(); std::sort(student, student + n); student[0].print(); student[n-1].print(); return 0; }
Python解法
n = int(input()) minS = [] maxS = [] for i in range(n): s = input().split(' ') if not minS or int(minS[2]) > int(s[2]): minS = s if not maxS or int(maxS[2]) < int(s[2]): maxS = s # print(s,minS,maxS) print(maxS[0],maxS[1]) print(minS[0],minS[1])
Java解法
import java.util.ArrayList; import java.util.Scanner; import java.util.Collections; class Node implements Comparable<Node> { private String name; private String id; private int score; public Node(String _name, String _id, int _score) { this.name = _name; this.id = _id; this.score = _score; } public void print() { System.out.printf("%s %s\n", name, id, score); } @Override public int compareTo(Node rhs) { return this.score - rhs.score; } } class Main { static Scanner in; public static void main(String[] args) { in = new Scanner(System.in); int n = in.nextInt(); ArrayList<Node> students = new ArrayList<Node>(); for (int i = 0; i < n; ++i) { String name = in.next(); String id = in.next(); int score = in.nextInt(); students.add(new Node(name, id, score)); } Collections.sort(students); students.get(n-1).print(); students.get(0).print(); in.close(); } }