一本通題庫 第一部分 C++語言 --> 第五章 數 組 1114:白細胞計數


1114:白細胞計數


時間限制: 1000 ms         內存限制: 65536 KB
提交數: 26662     通過數: 8522 

【題目描述】

醫院采樣了某臨床病例治療期間的白細胞數量樣本nn份,用於分析某種新抗生素對該病例的治療效果。為了降低分析誤差,要先從這nn份樣本中去除一個數值最大的樣本和一個數值最小的樣本,然后將剩余n2n−2個有效樣本的平均值作為分析指標。同時,為了觀察該抗生素的療效是否穩定,還要給出該平均值的誤差,即所有有效樣本(即不包括已扣除的兩個樣本)與該平均值之差的絕對值的最大值。

現在請你編寫程序,根據提供的nn個樣本值,計算出該病例的平均白細胞數量和對應的誤差。

【輸入】

輸入的第一行是一個正整數n2<n300n(2<n≤300),表明共有nn個樣本。

以下共有nn行,每行為一個浮點數,為對應的白細胞數量,其單位為109/L109/L。數與數之間以一個空格分開。

【輸出】

輸出為兩個浮點數,中間以一個空格分開。分別為平均白細胞數量和對應的誤差,單位也是109/L109/L。計算結果需保留到小數點后22位。

源代碼

#include<cstdio> #include<iostream> using namespace std; double a[300],b[300]; int main(void) { double max1=0,min=301; int i; double n,near,max2=0,p,s,d,c; scanf("%lf",&n); for(i=1;i<=n;i++) { scanf("%lf",&a[i]); s+=a[i]; } for(i=1;i<=n;i++) { if(max1<a[i]) { max1=a[i]; d=i; } } for(i=1;i<=n;i++) { if(a[i]<min) { min=a[i]; c=i; } } s=s-max1-min; p=1.0*s/(n-2); for(i=1;i<=n;i++) { if((i!=d)&&(i!=c)) { b[i]=p-a[i]; if(b[i]<0) b[i]=(-1)*b[i]; } else b[i]=-1; } for(int i=1;i<=n;i++) { if(b[i]>max2) max2=b[i]; } printf("%.2lf %.2lf\n",p,max2); return 0; }
這道題着實簡單,思路明了,但是細節之處讓我受益匪淺。
數據的格式是十分重要,跨格式的運算往往是行不通的。

原先虐心代碼(乍一看沒啥區別)
#include<cstdio> #include<iostream> using namespace std; float a[300],b[300]; int main(void) { int max1=0,min=301,i; float n,near,max2=0,p,s,d,c; scanf("%f",&n); for(i=1;i<=n;i++) { scanf("%f",&a[i]); s+=a[i]; } for(i=1;i<=n;i++) { if(max1<a[i]) { max1=a[i]; d=i; } } for(i=1;i<=n;i++) { if(a[i]<min) { min=a[i]; c=i; } }  s=s-max1-min; p=1.0*s/(n-2); for(i=1;i<=n;i++) { if((i!=d)&&(i!=c)) { b[i]=p-a[i]; if(b[i]<0) b[i]=(-1)*b[i]; } else b[i]=-1; } for(int i=1;i<=n;i++) { if(b[i]>max2) max2=b[i]; } printf("%.2f %.2f",p,max2); return 0; }
錯誤即在標紅處,所以說,還是細節決定成敗,數據的格式類型會導致不同的運算結果,所以在這一方面更要小心謹慎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM