0
点赞
收藏
分享

微信扫一扫

NOI刷题1.9(08)

承蒙不弃 2022-04-13 阅读 45
c++

08:白细胞计数

总时间限制: 

1000ms

内存限制: 

65536kB

描述

医院采样了某临床病例治疗期间的白细胞数量样本n份,用于分析某种新抗生素对该病例的治疗效果。为了降低分析误差,要先从这n份样本中去除一个数值最大的 样本和一个数值最小的样本,然后将剩余n-2个有效样本的平均值作为分析指标。同时,为了观察该抗生素的疗效是否稳定,还要给出该平均值的误差,即所有有 效样本(即不包括已扣除的两个样本)与该平均值之差的绝对值的最大值。

现在请你编写程序,根据提供的n个样本值,计算出该病例的平均白细胞数量和对应的误差。

输入

输入的第一行是一个正整数n(2 < n <= 300),表明共有n个样本。
以下共有n行,每行为一个浮点数,为对应的白细胞数量,其单位为10^9/L。数与数之间以一个空格分开。

输出

输出为两个浮点数,中间以一个空格分开。分别为平均白细胞数量和对应的误差,单位也是10^9/L。计算结果需保留到小数点后2位。

样例输入

5

12.0

13.0

11.0

9.0

10.0

样例输出

11.00 1.00

#include <iostream>

#include <iomanip>

#include <cmath>

using namespace std;

int main()

{

    int n, i, x=0, y=0;

    double a[300], maxd, mind, sum=0.0, avg, deviation=0.0;

    cin >> n;

    for (i=0; i<n; i++){

        cin >> a[i];

        if (i == 0) maxd=mind=a[i];

        if (a[i] > maxd){

            x = i;

            maxd = a[i];

        }

        if (a[i] < mind){

            y = i;

            mind = a[i];

        }

        sum += a[i];

    }

    sum -= maxd;

    sum -= mind;

    avg = sum / (n-2);

    for (i=0; i<n; i++){

        if (i==x || i==y) continue;

        double d = fabs(a[i]-avg);

        if (d > deviation) deviation = d;

    }

    cout << fixed << setprecision(2) << avg << " ";

    cout << fixed << setprecision(2) << deviation << endl;

    return 0;

}

举报

相关推荐

0 条评论