题目

从标准输入读入 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