1054 求平均值 (20分) - PAT (Basic Level) Practice (中文)

题目详情

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



 




介绍下两个函数:
 

sscanf函数
使用时需要包含头文件或者
函数原型:int sscanf(const char *buffer , const char *format , [argument ]...);
功能:从一个字符串中读进与指定格式相符的数据的函数,即sscanf会从buffer里读取数据,依照format的格式将数据写入到argument里

sprintf函数
使用时需要包含头文件或者
函数原型:int sprintf(char *string, char *format [,argument,...]);
功能: 将格式化后的数据(argument是被格式化的数据)写入string中(字符串),返回string的长度。
string-- 这是指向一个字符数组的指针。
format-- 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是%[flags][width][.precision][length]specifier。
[argument]...:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。



-解题代码

#include 
#include 
#include 
using namespace std;

int main()
{
	int n, k = 0;
	double temp, sum = 0.0;
	char a[50] = {'\0'}, b[50] = {'\0'};
	cin >> n;
	for(int i = 0; i < n; i++) {
		int error = 0;
		cin >> a;
		sscanf(a, "%lf", &temp);
		sprintf(b, "%.2f", temp);
		for(int j = 0; j < strlen(a); j++) {
			if (a[j] != b[j]) {
				error = 1;
				break;
			}
		}
		
		if (error || temp < -1000 || temp > 1000) {
			printf("ERROR: %s is not a legal number\n", a);
		} else {
			sum += temp;
			k++;
		}
	}
	
	if (!k) {
		cout << "The average of 0 numbers is Undefined";
	} else if (k == 1) {
		printf("The average of 1 number is %.2f", sum);
	} else {
		printf("The average of %d numbers is %.2f", k, 1.0 * sum / k);
	}
	
	return 0;
}

结果
1054 求平均值 (20分) - PAT (Basic Level) Practice (中文)_第1张图片

你可能感兴趣的:(#,PAT)