【GESP】C++三级练习 luogu-b2095, 白细胞计数
GESP三级练习,一维数组、循环分支嵌套,略有难度,难度★★☆☆☆。
luogu-B2095 白细胞计数
题目要求
题目描述
医院采样了某临床病例治疗期间的白细胞数量样本 $n$ 份,用于分析某种新抗生素对该病例的治疗效果。为了降低分析误差,要先从这 $n$ 份样本中去除一个数值最大的样本和一个数值最小的样本,然后将剩余 $n-2$ 个有效样本的平均值作为分析指标。同时,为了观察该抗生素的疗效是否稳定,还要给出该平均值的误差,即所有有效样本(即不包括已扣除的两个样本)与该平均值之差的绝对值的最大值。
现在请你编写程序,根据提供的 $n$ 个样本值,计算出该病例的平均白细胞数量和对应的误差。
输入格式
输入的第一行是一个正整数 $n$($2<n \le 300$),表明共有 $n$ 个样本。
以下共有 $n$ 行,每行为一个浮点数,为对应的白细胞数量,其单位为 $10^9/L$。数与数之间以一个空格分开。
输出格式
输出为两个浮点数,中间以一个空格分开。分别为平均白细胞数量和对应的误差,单位也是 $10^9/L$。计算结果需保留到小数点后 $2$ 位。
样例输入 #1
1
2
3
4
5
6
5
12.0
13.0
11.0
9.0
10.0
样例输出 #1
1
11.00 1.00
题目分析
解题思路分析:
- 首先,读取样本数量n和每个样本的值,存储在数组中。
- 初始化最大值、最小值和总和为第一个样本的值。
- 遍历数组,更新最大值和最小值。
- 计算去除最大值和最小值后的总和和平均值。
- 遍历数组,计算每个有效样本与平均值的绝对差,更新最大差值。
- 输出平均值和最大差值,保留两位小数。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n; // 输入样本数量
cin >> n;
double array[n]; // 存储样本值的数组
double max_num, min_num, all_sum = 0.0; // 初始化最大值、最小值和总和
for (int i = 0; i < n; i++) {
double cur; // 当前样本值
cin >> cur;
if (i == 0) {
max_num = cur; // 初始化最大值
min_num = cur; // 初始化最小值
} else {
max_num = max(max_num, cur); // 更新最大值
min_num = min(min_num, cur); // 更新最小值
}
array[i] = cur; // 将当前样本值存入数组
all_sum += cur; // 累加总和
}
double new_sum = all_sum - max_num - min_num; // 计算去除最大最小值后的总和
double new_avg = new_sum / (n - 2); // 计算平均值
double max_diff = 0.0; // 初始化最大差值
bool have_max = true; // 标记是否已找到最大值
bool have_min = true; // 标记是否已找到最小值
for (int i = 0; i < n; i++) {
if (array[i] == max_num && have_max) {
have_max = false; // 标记已找到最大值
continue; // 跳过最大值
} else if (array[i] == min_num && have_min) {
have_min = false; // 标记已找到最小值
continue; // 跳过最小值
} else {
max_diff = max(max_diff, abs(array[i] - new_avg)); // 更新最大差值
}
}
printf("%.2f %.2f", new_avg, max_diff); // 输出平均值和最大差值
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权