【PAT_C4】JAVA

该程序采用Java编程,读取输入的学生姓名、学号和成绩信息,通过遍历和比较所有学生的成绩,找出最高分和最低分学生的姓名和学号。程序首先初始化最高和最低成绩为第一个学生的信息,然后逐行读取后续学生信息,通过比较更新最高和最低成绩。最后输出最高分和最低分学生的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Question:

读入 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

解题思路:

问题的关键是比较学生成绩,通过成绩大小来输出答案。所以需要将学生成绩与学生信息进行关联。以下是三种解决问题的思维。

1.因此可以将这些信息定义为一个类,实例化学生对象,通过成绩属性来判断成绩。

2.通过数组下标映射关联学生属性,例如姓名数组,学号数组,成绩数组。比较成绩数组之后,通过下标映射关系来找出需要的信息。

3.直接用字符串存储学生的全部信息,通过对字符串的解析来get成绩最高学生的字符串信息和成绩最低的字符串信息。

我的方法是根据第三种思路来解决问题的,具体的思路如下:

因为输入的格式是一行一行的字符串,并且学生信息由空格隔开,因此可以将每一行的学生字符串信息拆解为一个字符串数组【split方法】,从而得到学生的具体信息。

初始化一个最最低学生信息成绩以及一个最高学生信息成绩,都以输入学生信息的第一行为标准

继续输入学生信息,并获取当前输入的学生成绩,与最高成绩和最低成绩作比较,若大于最高成绩则更新最高成绩和学生信息。若低于最低成绩,则更新最低成绩和最低成绩学生信息。

package PATC4;
import java.util.Scanner;

public class Main {
	String name;
	String id;
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		//实例化最高成绩学生信息与最低成绩学生
		Main best_stu=new Main();
		Main worst_stu=new Main();
		//最高成绩与最低成绩初始化【读入第一行输入数据】
		int stu_num=Integer.parseInt(sc.nextLine());
		String init_info=sc.nextLine();
		String[] init_info_stu =init_info.split(" ");
		int worst_score=Integer.parseInt(init_info_stu[2]);
		int best_score=Integer.parseInt(init_info_stu[2]);
		//最高成绩学生信息与最低学生信息初始化
		best_stu.name=init_info_stu[0];
		best_stu.id=init_info_stu[1];
		worst_stu.name=init_info_stu[0];
		worst_stu.id=init_info_stu[1];
		//读入其余输入信息
		for(int i=1;i<stu_num;i++)
		{
			String info=sc.nextLine();
			String[] split = info.split(" ");
			//获取当前行学生成绩
			int score = Integer.parseInt(split[2]);
			//与最高学生成绩和最低学生成绩作比较,并且更新学生信息
			//若当前分数高于最高分数,则更新最高分数和最高分数学生信息
			if(score>=best_score)
			{
				best_stu.name=split[0];
				best_stu.id=split[1];
				best_score=score;
			}
			//若当前分数低于最低分数,则更新最低分数和最低分数学生信息
			if(score<=worst_score)
			{
				worst_stu.name=split[0];
				worst_stu.id=split[1];
				worst_score=score;
			}
		}
		//输出最高学生信息和最低学生信息
		System.out.println(best_stu.name+" "+best_stu.id);
		System.out.println(worst_stu.name+" "+worst_stu.id);
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值