考查点:模拟题
提交情况:水题,但是有几个坑,首先number输出时如果是单数1不能加s,其次小数点后面数可以是零个。。
#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#define FOR(i, x, y) for(int i = x; i <= y; i++)
#define rFOR(i, x, y) for(int i = x; i >= y; i--)
#define MAXN 10010
#define oo 0x3f3f3f3f
using namespace std;
int n;
double sum;
bool judge(string s,double& ans)
{
int flag=0;
int flagd=0;
int len=s.length();
if(len>9) return false;
FOR(i,0,len-1)
{
if(s[i]<'0'||s[i]>'9'){
if(s[i]=='-'&&i!=0)return false;
if(s[i]=='+'&&i!=0) return false;
else if(s[i]!='-'&&s[i]!='.'&&s[i]!='+')return false;
else if(s[i]=='.'&&flagd==0){
flagd=1;
if(i!=len-3&&i!=len-2&&i!=len-1)return false;
}
}
if(s[i]<='9'&&s[i]>='0'){
ans=ans*10+s[i]-'0';
}
}
if(s[0]=='-')ans=-ans;
if(s[len-3]=='.')ans/=100;
if(s[len-2]=='.')ans/=10;
if(ans<-1000||ans>1000)return false;
return true;
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
cin>>n;
string st;
int num=0;
FOR(i,1,n)
{
cin>>st;
double ans=0;
if(judge(st,ans)==true){
sum+=ans;
num++;
}
else{
cout<<"ERROR: "<<st<<" is not a legal number"<<endl;
}
}
if(num==0) cout<<"The average of 0 numbers is Undefined"<<endl;
else if(num>1){
printf("The average of %d numbers is %.2f",num,sum/num);
}else{
printf("The average of 1 number is %.2f",sum);
}
return 0;
}