标签:html || 小数 else c++ 精确 ring 乙级 区间
本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [?] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。
输入第一行给出正整数 N(≤)。随后一行给出 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
。
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
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
aaa -9999
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
1 #include <iostream> 2 #include <cmath> 3 #include <string> 4 using namespace std; 5 //1054:求平均值 6 int main() { 7 int n, count = 0; 8 cin >> n; 9 double isok = 0; 10 for (int i = 0; i < n; i++) { 11 bool flag = true, first = false; 12 int Pnum = 0; 13 string input; 14 cin >> input; 15 for (int j = input[0] == ‘-‘ ? 1 : 0; j < input.length(); j++) { 16 if (isdigit(input[j]) || input[j] == ‘.‘) { 17 if (first) { 18 if (input[j] == ‘.‘) flag = false; 19 Pnum++; 20 } 21 if (input[j] == ‘.‘) first = true; 22 } 23 else flag = false; 24 } 25 if (Pnum > 2) flag = false; 26 if(flag){ 27 if (abs(stod(input)) > 1000) flag = false; 28 else { 29 count++; 30 isok += stod(input); 31 } 32 } 33 if (!flag) cout << "ERROR: " << input << " is not a legal number" << endl; 34 } 35 string s = count == 1 ? " number" : " numbers"; 36 cout << "The average of " << count << s << " is "; 37 if (count > 0) printf("%.2lf", isok / count); 38 else printf("Undefined"); 39 return 0; 40 }
标签:html || 小数 else c++ 精确 ring 乙级 区间
原文地址:https://www.cnblogs.com/47Pineapple/p/14667818.html