1054 求平均值 (20)(20 分)

本题的基本要求非常简单:给定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:

  1. 7
  2. 5 -3.2 aaa 9999 2.3.4 7.123 2.35

输出样例1:

  1. ERROR: aaa is not a legal number
  2. ERROR: 9999 is not a legal number
  3. ERROR: 2.3.4 is not a legal number
  4. ERROR: 7.123 is not a legal number
  5. The average of 3 numbers is 1.38

输入样例2:

  1. 2
  2. aaa -9999

输出样例2:

  1. ERROR: aaa is not a legal number
  2. ERROR: -9999 is not a legal number
  3. The average of 0 numbers is Undefined

PS:

我的思路:在判断一步步确定是否符合题目要求:

1、第一位必为数字或者负号(不能只有负号)

2、判断字符串从第二位开始的字符,只能出现数字或点,出现点时开启小数位计数,若出现第二个小数点,说明此数不合法。

3、经过上面的筛选,到这里的一定是数字,只要判断是否符合题目要求即可

推荐测试用例:

  1. in
  2. 6
  3. - -1.1 0.111 1.1.1 -1000 1000.1
  4. out
  5. ERROR: - is not a legal number
  6. ERROR: 0.111 is not a legal number
  7. ERROR: 1.1.1 is not a legal number
  8. ERROR: 1000.1 is not a legal number
  9. The average of 2 numbers is -500.55
  10. 注意:如果有效数(count)只有一个,注意最后输出语句里的numbernumbers
  1. #include<iostream>
  2. #include<string>
  3. #include<algorithm>
  4. #include<cmath>
  5. using namespace std;
  6. bool mydigit(char a) {
  7. return !(isdigit(a) || a == '.');
  8. }
  9. int pd(string s) {
  10. int point = count(s.begin(),s.end(),'.'); //记录小数点
  11. int m = 0; //记录小数位数
  12. if (s.find('.') != string::npos) m = s.length() - s.find('.') - 1;
  13. if (!(s[0] == '-'&&s.length()>1) && !isdigit(s[0])) //第一位必为数字或者负号(不能只有负号)
  14. return 0;
  15. if (m <= 2 && abs(stof(s)) <= 1000 && find_if(s.begin()+1, s.end(), mydigit) == s.end()) //必须保证在题目范围内
  16. return 1;
  17. return 0;
  18. }
  19. int main() {
  20. int n, count = 0;
  21. double t, sum = 0;
  22. string str;
  23. cin >> n;
  24. while (n--) {
  25. cin >> str;
  26. if (pd(str)) {
  27. count++;
  28. sum += stof(str);
  29. }
  30. else
  31. cout << "ERROR: " << str << " is not a legal number" << endl;
  32. }
  33. cout << "The average of " << count;
  34. if (count == 1) //看清题意
  35. cout << " number is ";
  36. else
  37. cout << " numbers is ";
  38. if (count)
  39. printf("%0.2lf", (double)sum / count);
  40. else
  41. cout << "Undefined";
  42. return 0;
  43. }

历史代码:

  1. #include<iostream>
  2. #include<string>
  3. #include<cmath>
  4. using namespace std;
  5. int pd(string s) {
  6. int key = 0; //记录小数点
  7. int m = 0; //记录小数位数
  8. if (!(s[0] == '-'&&s.length()>1) && !isdigit(s[0])) //第一位必为数字或者负号(不能只有负号)
  9. return 0;
  10. for (int i = 1; i < s.length(); i++) {
  11. if (isdigit(s[i])) {
  12. if (key) m++; //小数位计数器
  13. }
  14. else if (s[i] == '.') {
  15. key++; //开启计数器
  16. if (key == 2) //只能有一个小数点
  17. return 0;
  18. }
  19. else //出现其他符号返回0
  20. return 0;
  21. }
  22. if (m <= 2 && abs(atof(s.c_str())) <= 1000) //必须保证在题目范围内
  23. return 1;
  24. return 0;
  25. }
  26. int main() {
  27. int n, count = 0;
  28. double t, sum = 0;
  29. string str;
  30. cin >> n;
  31. while (n--) {
  32. cin >> str;
  33. if (pd(str)) {
  34. count++;
  35. sum += atof(str.c_str());
  36. }
  37. else {
  38. cout << "ERROR: " << str << " is not a legal number" << endl;
  39. }
  40. }
  41. cout << "The average of " << count;
  42. if (count == 1) //看清题意
  43. cout << " number is ";
  44. else
  45. cout << " numbers is ";
  46. if (count)
  47. printf("%0.2lf", (double)sum / count);
  48. else
  49. cout << "Undefined";
  50. return 0;
  51. }

PAT 1054 求平均值 (20)(代码+思路+测试用例)的更多相关文章

  1. PAT 1054. 求平均值 (20)

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

  2. PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的 ...

  3. 1054. 求平均值 (20)-PAT乙级真题

    今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...

  4. PAT 乙级 1054 求平均值 (20) C++版

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

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

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  6. PAT——1054. 求平均值

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

  7. PAT 1054 求平均值

    https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 本题的基本要求非常简单:给定N个实数,计算它 ...

  8. 1054 求平均值 (20 分)C语言

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

  9. PAT(B) 1054 求平均值(Java)

    题目链接:1054 求平均值 (20 point(s)) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输 ...

随机推荐

  1. BFC概念及应用

    定义 块级格式化上下文   特性 1.内部box在垂直方向,一个接一个放置 2.box垂直方向的间距由margin决定    属于同一个BFC的相邻box的margin会发生重叠(外边距重叠)    ...

  2. node.js入门基础

    内容: 1.node.js介绍 2.node.js内置常用模块 3.node.js数据交互 一.node.js介绍 (1)node.js特点 与其他语言相比,有以下优点: 对象.语法和JavaScri ...

  3. 很详细的curl命令使用大全

    可以看作命令行浏览器 1.开启gzip请求 curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响应时间 cu ...

  4. openx _金额

    1/work/openx/lib/max/Delivery/log.php MAX_Delivery_log_logAdImpression    MAX_Delivery_log_logAdRequ ...

  5. mysql 5.7新特新 操作json 数组

    ; UPDATE EDI.edi_history SET response_summary = JSON_REPLACE(response_summary, ; 对于json数组,使用$[*]  然后 ...

  6. cookie和session的比较

    cookie和session的比较 一.对于cookie: ①cookie是创建于服务器端 ②cookie保存在浏览器端 ③cookie的生命周期可以通过cookie.setMaxAge(2000); ...

  7. maven - 配置强制从指定仓库拉取jar包

    从官方maven仓库拉取依赖,会超级慢.可配置settings.xml,强制从私服拉取 <mirrors> <mirror> <id>nexus-releases& ...

  8. Screen Monitors

    Screen Screen->MonitorCount Monitors Screen->FormCount Screen->Forms[I]->Name

  9. web.xml 组件加载顺序

    <web-app>     <display-name></display-name> WEB应用的名字 <description></descr ...

  10. VBA 使用QueryTables 中文乱码的处理

    一般情况: cnn = "OLEDB;Provider=IBMDA400;Data Source=TFB4001;User ID=;Password=;" Sql = " ...