题目描述
给定N名学生的信息,包含:
- 姓名s(仅含小写字母,长度不超过8)
- 语文、数学、英语成绩c1, c2, c3(均为整数,0 ≤ ci ≤ 150)
定义总分T = c1 + c2 + c3。要求找出总分最大的学生信息;若总分相同,则取输入顺序靠前的学生。
输入格式:
- 第一行:整数N(1 ≤ N ≤ 1000)
- 接下来N行:每行包含字符串s和三个整数c1, c2, c3,表示学生姓名及三门成绩
输出格式:
- 输出一行:姓名s及对应成绩c1, c2, c3,以空格分隔
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 1. 读取学生总数N
int N = scanner.nextInt();
// 2. 读取第一个学生的信息,作为初始最优值(避免初始值错误)
String bestName = scanner.next(); // 最优学生姓名
int bestC1 = scanner.nextInt(); // 最优学生语文成绩
int bestC2 = scanner.nextInt(); // 最优学生数学成绩
int bestC3 = scanner.nextInt(); // 最优学生英语成绩
int bestTotal = bestC1 + bestC2 + bestC3; // 最优学生总分
// 3. 遍历剩余N-1个学生(从第2个到第N个)
for (int i = 1; i < N; i++) {
// 读取当前学生的信息
String currName = scanner.next();
int currC1 = scanner.nextInt();
int currC2 = scanner.nextInt();
int currC3 = scanner.nextInt();
int currTotal = currC1 + currC2 + currC3; // 当前学生总分
// 比较当前学生与最优学生的总分
if (currTotal > bestTotal) {
// 若当前总分更高,更新所有最优信息
bestName = currName;
bestC1 = currC1;
bestC2 = currC2;
bestC3 = currC3;
bestTotal = currTotal;
}
// 若总分相等:不更新(保留输入顺序更早的最优学生)
}
// 4. 输出结果(姓名 + 三门成绩,空格分隔)
System.out.printf("%s %d %d %d", bestName, bestC1, bestC2, bestC3);
scanner.close();
}
}
盲点:不知道printf的使用方法
题目中要理解 System.out.printf("%s %d %d %d", bestName, bestC1, bestC2, bestC3); 为什么能这么写,核心是搞懂 printf 格式化输出的 “规则”—— 它靠 “格式字符串” 和 “参数列表” 的一一对应、类型匹配来实现精准输出,就像 “按模板填内容” 一样。
先拆解 printf 的两个核心部分
printf 方法的语法是:System.out.printf(格式字符串, 参数1, 参数2, ..., 参数N);
它的逻辑是:用 “参数列表” 里的值,按 “格式字符串” 规定的类型和样式,填充到对应的位置,最后输出完整内容。
对应到你的代码:
- 格式字符串:
"%s %d %d %d"(告诉程序 “要输出 4 个数据,分别按字符串、整数、整数、整数的格式,用空格分隔”); - 参数列表:
bestName, bestC1, bestC2, bestC3(要填充到格式字符串里的具体数据)。
逐个解释格式字符串里的 “密码”:%s 和 %d
格式字符串里的 %s、%d 不是随便写的,它们是 “格式说明符”—— 专门用来匹配后面参数的 “类型”,告诉程序 “这个位置要填什么类型的数据”。
| 格式说明符 | 对应的数据类型 | 作用 |
| %s | 字符串(String) | 把参数按照“字符串原样”输出 |
| %d | 整数(int/long) |
把参数按照“十进制整数”输出 |
比如我的代码里:
- 第一个格式符 %s → 专门匹配第一个参数 bestName(String 类型,比如 “bob”),输出时会把 “bob” 原样显示;
- 第二个格式符 %d → 匹配第二个参数 bestC1(int 类型,比如 95),输出时显示 “95”;
- 第三个 %d → 匹配 bestC2(比如 95),输出 “95”;
- 第四个 %d → 匹配 bestC3(比如 95),输出 “95”。
注:也可以在print里面用就 “+” 直接拼接在一起
884

被折叠的 条评论
为什么被折叠?



