top1编程
← 返回题目
题解

【入门】摘苹果

1 条题解

  • 0
    @ 2026-7-31 12:13:31

    解题思路

    题目要求把 n 个苹果中最小的去掉(如果有多个最小的都去掉),然后算剩下苹果的平均重量。

    思路:

    1. 读入所有苹果重量,同时找出最小的重量 mi
    2. 再遍历一遍:遇到等于 mi 的跳过,其他累加重量 s 和个数 c
    3. 平均重量 = s ÷ c,保留 1 位小数

    为什么遍历两遍? 第一遍找最小值(要知道最小的值是多少才能判断哪些要去掉),第二遍累加剩下的。

    怎么保留 1 位小数? 用 fixed 和 setprecision(1)。同时注意用 s * 1.0 让除法变成小数除法,避免整数除法丢小数。

    举例 苹果 3 1 2 1 3:

    • 最小值是 1,有两个 1 都要去掉
    • 剩下的 3、2、3,平均 = (3+2+3) ÷ 3 = 2.666…
    • 保留 1 位小数 = 2.7

    参考代码

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        int n, a[1000];
        cin >> n;
    
        // 读入并找出最小重量
        int mi = 999999999;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            if (a[i] < mi) mi = a[i];
        }
    
        // 去掉所有最小值,累加剩余的
        int s = 0, c = 0;
        for (int i = 0; i < n; i++) {
            if (a[i] == mi) continue;
            s += a[i];
            c++;
        }
    
        cout << fixed << setprecision(1) << s * 1.0 / c;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),遍历两遍数组
    • 空间复杂度:O(N),一个数组存重量
    • 1