题目:
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输出格式:
每个测试输入包含 1 个测试用例,格式为
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输出样例:
Mike CS991301
Joe Math990112
解题思路:
首先应该思考如何处理输入的姓名、学号、成绩这三个数据,根据题目要求输入格式,我们可以将三种输入的数据先分离出来再依次传到一个数组中去。分析好输入数据的处理后,接下来就应该分析如何处理成绩,判断成绩的高低再进行输出。先设置一个循环,将三种输入的数据先分离出来再依次传到一个数组中去,然后设置一个变量temp存储数组中的成绩,在循环里面将temp与所有输入的成绩依次进行比较,如果temp大于最高分max则令max的值更新为temp,同理如果temp小于最低分min,则令min的值更新为temp,同时将最新一轮循环的满足循环要求的学生姓名和学号合并记录下来,所有循环结束后输出最后所存数组中的成绩最高和最低的学生姓名和学号。
代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //n为第一行输入的数字
sc.nextLine(); //表示切换到下一行/消除换行符的影响,提前吞掉空格,防止后面吞掉
int max = 0; //最高分的初始值
int min = 100; //最低分的初始值
int temp = 0; //设置一个中间变量
String maxName = ""; //记录成绩最大的姓名和学号
String minName = ""; //记录成绩最小的姓名和学号
for (int i = 0; i < n; i++) {
String student = sc.nextLine();
String stringArray[] = student.split(" "); //利用空格符分离姓名、学号、成绩,再将它们依次传入数组中
temp = Integer.parseInt(stringArray[2]); //将输入的成绩存入中间变量
if (temp > max) { //判断是否为当前所有输入的最大值
max = temp;
maxName = stringArray[0] + " " + stringArray[1]; //将分离的姓名和学号组在一起输出
}
if (temp < min) { //判断是否为当前所有输入的最小值
min = temp;
minName = stringArray[0] + " " + stringArray[1]; //将分离的姓名和学号组在一起输出
}
}
System.out.println(maxName);
System.out.println(minName);
}
}