1054 求平均值(PAT乙级 C++)
生活随笔
收集整理的這篇文章主要介紹了
1054 求平均值(PAT乙级 C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
本題的基本要求非常簡單:給定 N 個實數,計算它們的平均值。但復雜的是有些輸入數據可能是非法的。一個“合法”的輸入是 [?1000,1000] 區間內的實數,并且最多精確到小數點后 2 位。當你計算平均值的時候,不能把那些非法的數據算在內。
輸入格式:
輸入第一行給出正整數 N(≤100)。隨后一行給出 N 個實數,數字間以一個空格分隔。
輸出格式:
對每個非法輸入,在一行中輸出 ERROR: X is not a legal number,其中 X 是輸入。最后在一行中輸出結果:The average of K numbers is Y,其中 K 是合法輸入的個數,Y 是它們的平均值,精確到小數點后 2 位。如果平均值無法計算,則用 Undefined 替換 Y。如果 K 為 1,則輸出 The average of 1 number is Y。
輸入樣例 1:
7 5 -3.2 aaa 9999 2.3.4 7.123 2.35輸出樣例 1:
ERROR: aaa is not a legal number ERROR: 9999 is not a legal number ERROR: 2.3.4 is not a legal number ERROR: 7.123 is not a legal number The average of 3 numbers is 1.38輸入樣例 2:
2 aaa -9999輸出樣例 2:
ERROR: aaa is not a legal number ERROR: -9999 is not a legal number The average of 0 numbers is Undefined分析
- 本體重點在找出非法輸入,非法輸入包含以下:
- 非數字:aaa,a123,23a,_as3等
- 多個小數點或者負號:-2-3,2.3.4
- 小數位數多:1.231,3.3331等
- 數值范圍:<-1000(如-1001),>1000(如1001)。
- 還需要注意,有1個合法輸入時,輸出"The average of 1 number is Y",Y 是它們的平均值。
AC代碼
#include <iostream> #include<iomanip> #include<string> #include<cstdlib> using namespace std; int main() {string s,ans="";int i,j,n,k=0,len,flag1=0,flag2=0,flag3=0;double sum=0.0;cin>>n;for(i=0; i<n; i++){cin>>s;len=s.length();for(j=0; j<len; j++){if(s[j]=='-'){ans+="-";flag1++;}else if(s[j]=='.'){ans+=".";flag2++;}else if(flag2==0&&s[j]>='0'&&s[j]<='9'){ans+=s[j];}else if(flag2>0&&s[j]>='0'&&s[j]<='9'){flag3++;}else{flag1=2;break;}}float t;try{size_t length;t =stof(s,&length);}catch(...){}if(flag1>1||flag2>1||flag3>2||t<-1000||t>1000){cout<<"ERROR: "<<s<<" is not a legal number"<<endl;flag1=0;flag2=0;flag3=0;continue;}flag1=0;flag2=0;flag3=0;k++;sum+=t;}if(k==0)cout<<"The average of 0 numbers is Undefined";else if(k==1)cout<<"The average of "<<k<<" number is "<<fixed<<setprecision(2)<<sum/k;elsecout<<"The average of "<<k<<" numbers is "<<fixed<<setprecision(2)<<sum/k;return 0; }更多題解
PAT 乙級(Basic Level) 題解匯總(持續更新)(C++坑點分析)
總結
以上是生活随笔為你收集整理的1054 求平均值(PAT乙级 C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 放松心情的句子 释放心情的说说220个
- 下一篇: 1057 数零壹(PAT乙级 C++实现