白细胞计数(信息学奥赛一本通-T1114)
生活随笔
收集整理的這篇文章主要介紹了
白细胞计数(信息学奥赛一本通-T1114)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
醫院采樣了某臨床病例治療期間的白細胞數量樣本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<cstdio> using namespace std; int main() {double n;int flag_max,flag_min;int i; double max=-99999,min=99999;double a[3001],b[3001],sum=0;double average,ave_max=-99999;cin>>n;//輸入樣本數量nfor(i=1;i<=n;i++){cin>>a[i];//輸入樣本值if(a[i]>max) {max=a[i];//記錄最大值flag_max=i;//記錄最大值位置}if(a[i]<min){ min=a[i];//記錄最小值flag_min=i;//記錄最小值位置}sum+=a[i];//計算n個樣本白細胞數量之和}average=1.0*(sum-max-min)/(n-2);//計算平均白細胞數量for(i=1;i<=n;i++){if(i!=flag_max&&i!=flag_min)//不計算已舍去的兩個樣本{b[i]=a[i]-average;//記錄每個樣本與平均數之差的絕對值if(b[i]<0)b[i]=-b[i];}elseb[i]=-99999;//否則賦值最小,使其不可能為最大值}for(i=1;i<=n;i++)//找最大的差值if(b[i]>ave_max)ave_max=b[i];printf("%.2lf %.2lf\n",average,ave_max);return 0; }?
總結
以上是生活随笔為你收集整理的白细胞计数(信息学奥赛一本通-T1114)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划 —— 背包问题 P03 ——
- 下一篇: 信息学奥赛一本通C++语言——1059: