题目
从标准输入读入 n 个整数,求出这批数据的最大值、最小值以及平均值(保留两位小数)。
输入格式:第一行输入整数个数 n;第二行输入 n 个整数,以空格分隔。
输出格式:在一行中按 max=最大值 min=最小值 avg=平均值 的格式输出,平均值保留两位小数,末尾换行。
数据范围与约定:1 ≤ n ≤ 105,元素绝对值不超过 105。
思路与算法
1. 单次遍历流式处理
读入第一个数字初始化 maxv = minv = x,累加和 sum = x。后续数字在读入的同时实时与最值比较并累加,只需 O(n) 时间与 O(1) 辅助空间。
2. 浮点精度除法
平均值计算需先将整型 sum 转换为浮点型(如 sum * 1.0 / n),避免发生整数截断除法;使用 %.2f 保留两位小数。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n < 1) {
return;
}
// 先读入第 1 个数,作为极值的初始基准
int x = sc.nextInt();
int maxv = x;
int minv = x;
long sum = x;
// 读入后续数字并动态更新最大值、最小值与累加和
for (int i = 1; i < n; i++) {
x = sc.nextInt();
if (x > maxv) maxv = x;
if (x < minv) minv = x;
sum += x;
}
// sum * 1.0 转换为浮点除法,保留 2 位小数
System.out.printf("max=%d min=%d avg=%.2f%n", maxv, minv, sum * 1.0 / n);
}
}运行示例
输入:
4
3 1 4 2输出:
max=4 min=1 avg=2.50