一直有两个测试点过不了也是怪,就不知道哪错了。
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 [−1000,1000] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then N numbers are given in the next line, separated by one space.
Output Specification:
For each illegal input number, print in a line ERROR: X is not a legal number
where X
is the input. Then finally print in a line the result: The average of K numbers is Y
where K
is the number of legal inputs and Y
is their average, accurate to 2 decimal places. In case the average cannot be calculated, output Undefined
instead of Y
. In case K
is only 1, output The average of 1 number is Y
instead.
Sample Input 1:
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
Sample Output 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
Sample Input 2:
2
aaa -9999
Sample Output 2:
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
#include "pch.h"
#include <iostream>
#include<string.h>
#include<stdio.h>
#include<iomanip>
#include<vector>
#include<string>
#include<algorithm>
#include<queue>
#include<map>
#include<math.h>
using namespace std;
double judge(string s)
{
int flag = 1;
int len = s.length();
double res;
for (int i = 0; i < len; i++)
{
if(i==0&&(s[i]=='-'||s[i]=='+'))
continue;
if (s[i] == '.'&&flag)
{
flag = 0;
if (len - i >3)
return 0;
}
else if (s[i]<'0' || s[i]>'9')
return 0;
}
res=stod(s);//string转化为double
//cout << res << "res" << endl;
if (res < -1000 || res>1000)
return 0;
else
return res;
}
int main()
{
int n;
cin >> n;
double sum = 0;
int num = 0;
string a;
double m ;
for (int i = 0; i < n; i++)
{
cin >> a;
m = judge(a);
if (m)
{
sum += m;
num++;
}
else
cout << "ERROR: " << a << " is not a legal number" << endl;
}
if (num == 0)
cout << "The average of 0 numbers is Undefined" << endl;
else if (num == 1)
cout << "The average of 1 number is " << fixed << setprecision(2) << sum<< endl;
else
cout << "The average of " << num << " numbers is " << fixed << setprecision(2) << sum / num << endl;
}