提交时间:2026-01-04 15:41:51
运行 ID: 81210
#include <iostream> #include <iomanip> #include <cmath> // 用于 fabs 函数 using namespace std; int main() { int n; cin >> n; double samples[305]; // n≤300,多开一点 // 输入所有样本 for (int i = 0; i < n; i++) { cin >> samples[i]; } // 1. 找出最大值和最小值的索引 int maxIdx = 0, minIdx = 0; for (int i = 1; i < n; i++) { if (samples[i] > samples[maxIdx]) { maxIdx = i; } if (samples[i] < samples[minIdx]) { minIdx = i; } } // 2. 计算有效样本的总和(排除最大值和最小值) double sum = 0.0; for (int i = 0; i < n; i++) { // 跳过最大值和最小值的样本(注意:如果最大值和最小值是同一个?不会,因为n>2且样本值可能相同,但索引不同) // 为安全起见,判断索引而不是值,防止多个相同最值被误删 if (i == maxIdx || i == minIdx) { continue; } sum += samples[i]; } // 3. 计算平均值 double average = sum / (n - 2); // 4. 计算误差:有效样本与平均值之差的绝对值的最大值 double maxError = 0.0; for (int i = 0; i < n; i++) { if (i == maxIdx || i == minIdx) { continue; // 跳过被排除的样本 } double diff = fabs(samples[i] - average); if (diff > maxError) { maxError = diff; } } // 5. 输出,保留两位小数 cout << fixed << setprecision(2) << average << " " << maxError << endl; return 0; }