题目

本题的基本要求非常简单:给定 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++)相关推荐

  1. 1054. 求平均值 (20)

    1054. 求平均值 (20)本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区间内的实数, ...

  2. 【Python】1054 求平均值(Python异常处理练习)

    1. 题目 2. 代码 重坑,读题不仔细,导致耗时多. 题目中合法数字当只用一个的时候,输出的结果中的是number,而不是numbers # https://pintia.cn/problem-se ...

  3. PTA 1054 求平均值 (c++ 代码+分析)

    1054 求平均值 (20 分) 分析:这个题乍一看并不难,但是丢分的点还是挺多的. 1.要注意只有一个小数点 2.小数点不能放在首位,而且首位是负号的话不能只有这一位. 3.每位只能是数字,且小数点 ...

  4. 【最优解法】1054 求平均值 (20分)_31行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个" ...

  5. PAT 乙级 1054. 求平均值 (20) Java版

    本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当 ...

  6. 【PAT乙级】1054 求平均值 (20 分)

    题目地址 测试点 2:k==1 number没有s 测试点 3:12. 这种是合法的 #include<cstdio> #include<iostream> #include& ...

  7. 1054. 求平均值

    本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当 ...

  8. PTA 1054 求平均值 (20 分)

    文章目录 code1 18分 code2 20分 注意点 code1 18分 #include<iostream> #include<string.h> using names ...

  9. 【最新合集】PAT乙级最优题解(题解+解析+代码)

    以下每道题均是笔者多方对比后, 思考整理得到的最优代码,欢迎交流! pat乙级题解目录 编号 标题 题解 分类 1001 害死人不偿命的(3n+1)猜想 (15分) 9行代码AC 水 1002 写出这 ...

最新文章

  1. Java基础-static 关键字解析
  2. 利用 Node.js 实现 SAP Hana 数据库编程接口
  3. Java泛型面试问题
  4. Apache Shiro 简介
  5. 《软件需求分析(第二版)》第 2 章——客户眼中的需求 重点部分总结
  6. python do while语句_python控制语句执行流程(while)
  7. 10月24日云栖精选夜读:2017杭州·云栖大会完美收官 虚拟化平台精彩回顾
  8. mysql data masking_Percona8.0.17的数据屏蔽插件的使用
  9. java调用jni_Java调用JNI
  10. httpClient4 设置代理
  11. 扩展卡尔曼滤波算法 EKF
  12. python学习(总)
  13. 微信8.0.3:做重了群公告,再也不能@所有人了!
  14. C#不使用委托实现函数回调
  15. 超详细的集合思维导图
  16. 实用的日语翻译软件及翻译网址
  17. wangeditor支持图片和视频上传
  18. 【英文版+中文版】2021年美国大学生数学建模赛题发布!!!
  19. HTML5/HTML中input标签用法解读
  20. 金蝶9.1 mdac安装 question

热门文章

  1. Docker容器中的WildFly Swarm JAX-RS微服务
  2. JavaOne 2015 –提交的技巧和建议
  3. Oracle ADF移动世界! 你好!
  4. 在Spring容器外部连接对象依赖项
  5. ADF:将UI类别与动态表单一起使用
  6. 注册界面演示代码(前端开发)
  7. vim 底行命令模式下的全局命令 g(global)
  8. IntelliJ IDEA for Mac如何存取自定义快捷键配置文件
  9. java获取文件夹 路径,Java获取文件的路径
  10. python django开发网站项目难吗_用django开发网站时遇到的问题