1108 Finding Average (20分)
题目大意:找出给定序列的不符合要求的数,并求出剩余符合要求数字的平均数
tips:
- 测试点2:当只有一个数符合要求时,输出为number ,多于一个数字时为numbers
- 还要注意输入为如 .52 和 52. 的情况,也是合法的
可参考柳婼大神的代码,使用sscanf和sprintf来解决,简单很多(学到了)
#include<iostream> //输入输出流头文件
#include<math.h> //数学函数
#include<string> //C++string类
using namespace std; //标准命名空间
int n,cnt=0;
int main(){ //主函数
#ifdef ONLINE_JUDGE //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
freopen("1.txt", "r", stdin); //从1.txt输入数据
#endif
cin>>n;
string s;
double sum=0;
for(int i=0;i<n;i++){
cin>>s;
double x=0;int j=0,flag=1,point=0;
if(s[0]=='-'){flag=-1;j=1;}//负数
for(;j<s.size();j++){
if(point==0&&s[j]=='.')point=1;
else if(point<3&&s[j]>='0'&&s[j]<='9') //point若=3表明当前为两位小数,不可再增加小数
{
int m=s[j]-'0';
if(point)
{
x=x+pow(0.1,point)*m;
point++;
}
else x=x*10+m;
}
else{
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;
break;
}
if(x>1000){
cout<<"ERROR: "<<s<<" is not a legal number"<<endl;
break;
}
}
if(j==s.size()) {//当前面的循环正常结束时,表明字符串合法
sum+=flag*x;
cnt++;
}
}
if(cnt==0)cout<<"The average of 0 numbers is Undefined"<<endl;
else if(cnt==1)printf("The average of %d number is %.2f\n",cnt,sum);
else printf("The average of %d numbers is %.2f\n",cnt,sum/cnt);
return 0; //返回0,如果不返回0,PAT会报错
}