题解
【入门】摘苹果
1 条题解
-
0
解题思路
题目要求把 n 个苹果中最小的去掉(如果有多个最小的都去掉),然后算剩下苹果的平均重量。
思路:
- 读入所有苹果重量,同时找出最小的重量 mi
- 再遍历一遍:遇到等于 mi 的跳过,其他累加重量 s 和个数 c
- 平均重量 = 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