PAT:B1004 成绩排名(20 分)
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 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/C++:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
// 1. 写一个构造体
struct Stu{
char name[15];
char ID[15];
int grade;
}Max, Min, temp;
int main() {
// 姓名,学号不超过10个字符串 成绩
// 输出成绩最高的,和成绩最低的学生 姓名 学号
Min.grade = 101;
Max.grade = -1;
int n;
cin >> n;
for(int i = 0; i < n; i++) {
scanf("%s %s %d", &temp.name, &temp.ID, &temp.grade);
if(temp.grade > Max.grade) Max = temp;
if(temp.grade < Min.grade) Min = temp;
}
printf("%s %s\n%s %s", Max.name, Max.ID, Min.name, Min.ID);
return 0;
}
Java:
import java.util.Scanner;
class Stu1{
String name, id;
int grade;
public Stu1(String name, String id, int grade) {
this.name = name;
this.id = id;
this.grade = grade;
}
public Stu1() {
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stu1 maxStu = new Stu1(null, null, -1);
Stu1 minStu = new Stu1(null, null, 101);
Stu1 temp;
int N = in.nextInt();
for (int i = 0; i < N; i++) {
temp = new Stu1(in.next(), in.next(), in.nextInt());
if(temp.grade > maxStu.grade) {
maxStu = temp;
}
if (temp.grade < minStu.grade) {
minStu = temp;
}
}
in.close();
System.out.println(maxStu.name + " " + maxStu.id);
System.out.println(minStu.name + " " + minStu.id);
}
}