本题的基本要求非常简单:给定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
=========================================================================================
不怎么难随便去别人那搜吧……
但是非常玄学的是第三个测试点就是过不了,也注意了number不加s的事情了。【按照网上的说法,就是测试
K=1的情况】
经过测试,我能够确定那个样例的确进了k=1的情况。【将输出改为一个死循环,只有那个测试点超时】
后来我在想,是不是我的判断函数有问题,于是搜索了一下别人的AC代码,摘了一个替换我的函数,还是第三
个测试点WA,其余通过……
至今原因未明,求大佬指正是哪里出错了。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <iomanip> #include <cmath> #include <algorithm> #include <string> #include <cctype> #include <sstream> #include <map> #include <set> #include <list> #include <vector> #include <queue> #include <stack> #define MAXN 100005 #define INF 0x7f using namespace std; bool judge(string str); int main() { int n,i,j,len,num=0; double k,sum=0; string temp; stringstream ss; cin>>n; int arr[105]={0}; for(i=0;i<n;i++) { k = 0; temp.clear(); ss.clear(); cin>>temp; if(judge(temp) == true) { ss<<temp; ss>>k; if(k>1000.0 || k<-1000.0) { cout<<"ERROR: "<<k<<" is not a legal number"<<endl; } else { sum += k; num++; } } else cout<<"ERROR: "<<temp<<" is not a legal number"<<endl; } if(num == 0) { cout<<"The average of 0 numbers is Undefined"<<endl; } else if(num == 1) { cout<<"The average of 1 number is "<<fixed<<setprecision(2)<<sum<<endl; } else { sum /= (double)num; cout<<"The average of "<<num<<" numbers is "<<fixed<<setprecision(2)<<sum<<endl; } return 0; } bool judge(string str) { int i,len,flag=0; len = str.size(); for(i=0;i<len;i++) { if(str[i]<'0' || str[i]>'9') { if(str[i]=='-') { if(i != 0) return false; } else if(str[i]=='.' && i==0) return false; else if(str[i]=='.' && i==1 && str[0]=='-') return false; else if(str[i]=='.' && flag==0) { flag = 1; if(len-i > 3) return false; } else return false; } } return true; }