The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A legal input is a real number in [−] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.
Each input file contains one test case. For each case, the first line gives a positive integer N (≤). Then N numbers are given in the next line, separated by one space.
For each illegal input number, print in a line
ERROR: X is not a legal number
whereX
is the input. Then finally print in a line the result:The average of K numbers is Y
whereK
is the number of legal inputs andY
is their average, accurate to 2 decimal places. In case the average cannot be calculated, outputUndefined
instead ofY
. In caseK
is only 1, outputThe average of 1 number is Y
instead.
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 /* 2 Data: 2019-06-16 13:51:57 3 Problem: PAT_A1108#Finding Average 4 AC: 24:26 5 6 题目大意: 7 计算n个数的平均值,合法数范围在[-1000,1000],且不超过两位小数 8 */ 9 10 #include<cstdio> 11 #include<string> 12 #include<iostream> 13 using namespace std; 14 15 bool isLegal(string s, double &num) 16 { 17 int sign=1; 18 if(s[0] == ‘-‘) 19 { 20 sign=-1; 21 s.erase(0,1); 22 } 23 int pos=s.size(); 24 for(int i=0; i<s.size(); i++) 25 { 26 if(s[i] == ‘.‘) 27 { 28 if(pos==s.size()) 29 pos = i; 30 else 31 return false; 32 } 33 else if(s[i]<‘0‘ || s[i]>‘9‘) 34 return false; 35 } 36 int len = s.size()-pos-1; 37 if(len > 2) 38 return false; 39 num=0; 40 double upper=0,lower=0; 41 for(int i=0; i<pos; i++) 42 { 43 upper *= 10; 44 upper += (s[i]-‘0‘); 45 } 46 for(int i=s.size()-1; i>pos; i--) 47 { 48 lower += (s[i]-‘0‘); 49 lower *= 0.1; 50 } 51 num = upper + lower; 52 if(num > 1000) 53 return false; 54 num *= sign; 55 return true; 56 } 57 58 int main() 59 { 60 #ifdef ONLINE_JUDGE 61 #else 62 freopen("Test.txt", "r", stdin); 63 #endif // ONLINE_JUDGE 64 65 int n,cnt=0; 66 string str; 67 double sum=0,num; 68 scanf("%d", &n); 69 for(int i=0; i<n; i++) 70 { 71 cin >> str; 72 if(isLegal(str,num)) 73 { 74 cnt++; 75 sum += num; 76 } 77 else 78 printf("ERROR: %s is not a legal number\n", str.c_str()); 79 } 80 if(cnt==0) 81 printf("The average of 0 numbers is Undefined"); 82 else if(cnt==1) 83 printf("The average of 1 number is %.2f", sum); 84 else 85 printf("The average of %d numbers is %.2f", cnt,sum/cnt); 86 87 return 0; 88 }
原文:https://www.cnblogs.com/blue-lin/p/11031717.html