本题的基本要求非常简单:给定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 方法一
 package com.hone.basical;

 import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* 原题目:https://www.patest.cn/contests/pat-b-practise/1054
* @author Xia
* 注意:1、合法数字个数是0的时候The average of 0 numbers is Undefined
* 2、合法数字个数是1的时候 要输出The average of 1 number is Y
*/ public class basicalLevel1054average { public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt(); double total = 0;
int totalNum = 0;
//整理思路利用正则表达式判断输入的是否是位于[-1000,1000]之间,
//最多精确到小数点后2位的数字
for (int i = 0; i < N; i++) {
String mayNum = in.next();
if (isNum(mayNum)) { //如果是数字
double num =Double.parseDouble(mayNum);
if (num<=1000&&num>=-1000) {
total+=Double.parseDouble(mayNum);
totalNum++;
}else {
System.out.println("ERROR: "+mayNum +" is not a legal number");
}
}else {
System.out.println("ERROR: "+mayNum +" is not a legal number");
}
}
if (totalNum>1) {
DecimalFormat df =new DecimalFormat("##0.00");
String sp = df.format(total/(double)totalNum);
System.out.println("The average of "+totalNum +" numbers is "
+sp);
}else if (totalNum == 1) {
System.out.printf("The average of %.0f number is %.2f\n", totalNum, total / totalNum);
}else {
System.out.println("The average of 0 numbers is Undefined");
} } //定义函数判断是否是合法的数字
public static boolean isNum(String str){
String p = "((\\-?)(\\d+))(\\.(\\d){0,2})?";
Pattern pattern = Pattern.compile(p);
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
}

方法2

 package com.hone.basical;

 import java.util.Scanner;

 /*
* 来源:http://blog.csdn.net/qq_34594236/article/details/51714618
* 思路:
* 1.因为输入数字不一定是合法的 所以不能用nextDouble();
* 2.所以这里采用字符串输入
* 3.将字符串转变成double型数,如果无法转换(即非法数)则捕捉异常,输出相应语句
* 4.如果该字符串能转变成double型数,则进一步判断是否为合法数(题目规定-1000<=x<=1000 ,并且最多精确到小数点后2位);
* 5.这里介绍主要介绍两种判断是否最多是2位小数
* 第一种:将数字转换成精确到2位小数,求与原来的作差的绝对值;如果是0则符合,否则多余2位(该方法不是很严谨)如果输入数据是1.000000则该数字也合法,显然是错误的,但是测试数据没有这类型数据
* 第二种:将字符串长度-“.”的位置-1;即可算出小数点后有几位数字
* 这里面需要灵活的利用java中的try——catch机制
*/ public class basicalLevel1054average2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
String s = sc.nextLine(); String[] number = s.split(" "); double sum = 0;
double counts = 0;
for (int i = 0; i < n; i++) {
try {
double x = Double.parseDouble(number[i]);
int times = 0;
if (number[i].contains(".")) {
times = number[i].length() - number[i].indexOf(".") - 1;
}
if (x >= -1000 && x <= 1000 && times <= 2 && times >= 0) {
sum += x;
counts++;
} else {
throw new Exception();
}
} catch (Exception e) {
System.out.printf("ERROR: %s is not a legal number\n", number[i]);
}
} if (counts == 0) {
System.out.printf("The average of %.0f numbers is Undefined", counts);
} else if (counts == 1) {
System.out.printf("The average of %.0f number is %.2f\n", counts, sum / counts);
} else {
System.out.printf("The average of %.0f numbers is %.2f\n", counts, sum / counts);
} }
}

PAT——1054. 求平均值的更多相关文章

  1. PAT 1054 求平均值 (20)(代码+思路+测试用例)

    1054 求平均值 (20)(20 分) 本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区 ...

  2. PAT 1054 求平均值

    https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 本题的基本要求非常简单:给定N个实数,计算它 ...

  3. PAT 1054. 求平均值 (20)

    本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ...

  4. 1054. 求平均值 (20)-PAT乙级真题

    今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...

  5. PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的 ...

  6. PAT 乙级 1054 求平均值 (20) C++版

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  7. PAT(B) 1054 求平均值(Java)

    题目链接:1054 求平均值 (20 point(s)) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输 ...

  8. PAT-乙级-1054. 求平均值 (20)

    1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...

  9. 1054 求平均值 (20 分)C语言

    本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 ...

随机推荐

  1. Spring与Web

    一.定义页面及Servlet 在jsp页面加入以下,避免乱码 <meta charset="utf-8"> <body> <form action=& ...

  2. Java数组声明与拷贝的几种方式

    Java数组声明的三种方式 第一种(声明并初始化):          数据类型[] 数组名={值,值,...};          例:int[] a = {1,2,3,4,5,6,7,8};    ...

  3. 1475 m进制转十进制

    1475 m进制转十进制  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题解       题目描述 Description 将m进制数n转化成一个十进制数 ...

  4. PHP 如何向关联数组指定的 Key 之前插入元素

    PHP 关联数组可以通过三种方式插入新元素: $array[$insert_key] = $insert_value; $array = array_merge($array, $insert_arr ...

  5. JavaScript - 收藏集 - 掘金

    Angular 中的响应式编程 -- 浅淡 Rx 的流式思维 - 掘金第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第五节:多用户版本 ...

  6. oracle基础-创建表空间

    一. 创建表空间的完整格式 CREATE [UNDO|TEMPORARY] TABLESPACE tablespace_name       DATAFILE 'path/filename' [SIZ ...

  7. 解决Windows资源管理器右键菜单打开EditPlus容易导致资源管理器无响应问题

    这个问题确实很烦人,经常导致 资源管理器无响应,关闭后整个资源管理器彻底崩溃,原因未知.本着折腾和强迫症精神,这个问题一定要解决.方法如下: 1.不要用EditPlus自带的添加到系统右键菜单选项. ...

  8. Maximum Depth of Binary Tree 二叉树的深度

    Given a binary tree,find its maximum depth. The maximum depth is the number of nodes along the longe ...

  9. maven(18)-mybatis generator插件

     generator的作用 使用mybatis框架,在初始项目或修改数据库时,相应的要在JAVA项目中去写一些数据模型文件,DAO,映射XML等配置,而这个插件的作用就是自动生成这些文件,以节省大 ...

  10. CSS3 transition介绍

    transition从效果上看是一种平滑过渡的动画,本质上是在线性时间内将属性从开始值过渡到结束值.例如获得焦点,点击鼠标等动作导致CSS属性值的变化是瞬间完成的,感觉有点生硬.用transition ...