PAT (Basic Level) Practice (中文)1054 求平均值 (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

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

题目要求

作者     			CHEN, Yue
单位 浙江大学
代码长度限制 16 KB
时间限制 200 ms
内存限制 64 MB

解题思路

// 本题的难点在于如何判断输入的数字的合法性。
// 参考了一个大佬的代码,以及阅读网上的题解得到如下最简洁的办法 利用 sscanf() 和 sprintf() 两个函数。 sscanf( str,"%lf",&n );把字符数组 str 中的内容以 %lf 的格式 写到 n 中,从左至右 。
其写入时,非数值类型的字符,不会写入到 n 中
例如 sscanf( "7a" , "%lf" , &temp) ,则 temp 中储存的是数字 7 . sprintf( str,"%.2f",n ); 把 n 中的内容以 %.2f 的格式写到字符数组 str 中,从右至左 。

无奈的坑点

坑点 1 就是 数组开大一点!

本来呢,以为题目中规定的数据在 [-1000 , 1000] 之间 数据不会太大。但是我开 20 大小的数组竟然越界!!!

坑点 2 ,也是我觉得最无语的,当数组大小满足要求了,竟然有 测试点 3 显示答案错误

原因竟然是 当只有 1 个合法的数字的时候, numbers 不能加 s !!!!!!

完整代码

#include<bits/stdc++.h>
using namespace std ;
char str[50],str2[50] ;
int main(){
int n , cnt = 0 ;
cin >> n;
double temp = 0.0 , sum = 0.0 ;
for(int i = 0 ; i < n ; i ++){
scanf("%s" , str);
sscanf(str , "%lf" , &temp) ;
sprintf(str2 , "%.2f" , temp) ;
int flag = 0 ;
for(int j = 0 ; j < strlen(str) ; j ++){
if(str[j] != str2[j]){
flag = 1 ;
break ;
}
}
if(flag || temp < -1000 || temp > 1000){
printf("ERROR: %s is not a legal number\n" , str) ;
continue ;
}else{
sum += temp ;
cnt ++ ;
}
}
if(cnt == 1)
printf("The average of 1 number is %.2f\n" , sum) ;
else if(cnt > 1)
printf("The average of %d numbers is %.2f\n" , cnt , sum / cnt) ;
else
printf("The average of 0 numbers is Undefined\n") ;
return 0 ;
}

其他博客

PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...

  2. PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) 凌宸1642 题目描述: A number that will ...

  3. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642 题目描述: With the 2010 FIFA World Cu ...

  4. PAT (Advanced Level) Practice 1005 Spell It Right (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1005 Spell It Right (20 分) 凌宸1642 题目描述: Given a non-negative integer N ...

  5. PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642 题目描述: Calculate a+b and output the sum i ...

  6. PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1078 字符串压缩与解压 (20 分) 凌宸1642 题目描述: 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一 ...

  7. PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...

  8. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  9. PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1015 Reversible Primes (20 分) 凌宸1642 题目描述: A reversible prime in any n ...

随机推荐

  1. no need jQuery anymore & You don't need jQuery anymore!

    no need jQuery anymore & You don't need jQuery anymore! "use strict"; /** * * @author ...

  2. GitHub SSH key

    GitHub SSH key https://help.github.com/en/github/authenticating-to-github steps HTTPS clone !== SSH ...

  3. 如何用 js 实现一个 bind 函数

    如何用 js 实现一个 bind 函数 原理 实现方式 总结 refs https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc ...

  4. Koa & node.js

    KOA https://github.com/koajs/koa https://koajs.com/ $ nvm install 7 # node.js 7 + $ nvm install 10 $ ...

  5. webpack 5

    webpack 5 webpack 5 requires at least Node.js 10.13.0 (LTS). https://webpack.js.org/migrate/5/ https ...

  6. react new features 2020

    react new features 2020 https://insights.stackoverflow.com/survey/2019#technology-_-web-frameworks h ...

  7. Javascript中的事件冒泡与捕获

    事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数,useCapture:是否使用事件捕获,觉得有点模糊 Js事件流 页面的哪一部 ...

  8. js 实现红绿灯变换

    class LightFn{ async run(){ while(true){ console.log('this is green 3000'); await this.sleep(3000); ...

  9. 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别

    一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({   d ...

  10. Java流程控制:循环结构

    一.简介 顺序结构的程序语句只能被执行一次,如果您想要同样的操作执行多次,就需要使用循环结构. Java中有三种主要的循环结构: 'while'循环 'do...while'循环 'for'循环 在J ...