1108 Finding Average (20 分)
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
注意下 1要注意下
代码:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
private static Scanner sc = new Scanner(System.in);
public static boolean isNumeric(String str){
int cnt = 0;
for(int i = 0 ; i < str.length(); i++)
{
if(str.charAt(i) == '.')
cnt++;
}
if(cnt >= 2)
return false;
for(int i = 0 ; i < str.length(); i++)
{
if(i == 0 && str.charAt(i) == '-')
continue;
if(str.charAt(i) != '.' && (str.charAt(i) > '9' || str.charAt(i) < '0'))
return false;
}
int ans = 0, flag = 0;
for(int i = 0 ; i < str.length(); i++)
{
if(str.charAt(i) == '.')
flag = 1;
if(flag == 1)
{
if(str.charAt(i) >= '0' && str.charAt(i) <= '9')
ans++;
if(ans >= 3)
return false;
}
}
return true;
}
public static void main(String[] args){
int n = sc.nextInt(), cnt = 0;
String s;
double sum = 0;
for(int i = 0; i < n; i ++)
{
s = sc.next();
if(isNumeric(s) == true) //表明至少是个浮点数字或者整数了
{
double gg = Double.parseDouble(s);
if(gg > 1000.0|| gg < -1000.0)
System.out.println("ERROR: "+ s +" is not a legal number");
else
{
cnt ++;
sum += gg;
}
}else
System.out.println("ERROR: "+ s +" is not a legal number");
}
if(cnt == 0)
System.out.println("The average of 0 numbers is Undefined");
else if(cnt == 1)
System.out.printf("The average of 1 number is %.2f\n",sum);
else
System.out.printf("The average of %d numbers is %.2f\n",cnt,sum / (cnt * 1.0));
}
}