本题的基本要求非常简单:给定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. 零基础学python习题 - 进入python的世界

    1. python拥有以下特性:面向对象的特性.动态性.内置的数据结构.简单性.健壮性.跨平台性.可扩展性.强类型语言.应用广泛 2. python 需要  编译 3. 以下不属于python内置数据 ...

  2. csharp:Conversion Between DataTable and List

    /// <summary> /// http://www.codeproject.com/Tips/784090/Conversion-Between-DataTable-and-List ...

  3. MongoDB 排序文档

    sort() 方法 要在 MongoDB 中的文档进行排序,需要使用sort()方法. sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序. 要指定排序顺序1和-1. 1用于升序排列 ...

  4. Cloudera Manager5安装总结遇到问题及解决办法 CDH 5.8 on CentOS 7

    问题导读:1.Cloudera Manager在线安装你认为有什么优点和缺点?2.Cloudera Manager安装过程中遇到,你认为该如何解决?3.在线安装addr.arpa domain nam ...

  5. 中国国内 - 可用API合集

    中国国内 - 可用API合集 收录一篇中国国内可用API合集,分享给大家 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网站 快递查询 旅游 社交 视频 天气 团队协作 图片与图像处理 外 ...

  6. Chromebook 阿里云ECS 配置 jupyter Notebook

    前言 新购入一台Chromebook Pixel ,为方便机器学习编程,用学生版的阿里云ECS搭建了jupyter Notebook 为减少下次踩坑,参考链接记录如下: 参考链接 阿里云使用笔记(一) ...

  7. 星空灯改装成USB供电

    简单的手工活,20分钟搞定 1.用一根USB线剪断,将红黑两根线分别连接到星空灯电源供电的正负极 2.由于USB输出5V 0.5A的电流,因此需要改装下,办法一,加电阻,办法二,换灯泡,由于小电阻并不 ...

  8. 毕向东_Java基础视频教程第20天_IO流(11~14)

    第20天-11-IO流(Properties简述) .properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名.它们也可以存储用于国际化和本地化的字符串,这种文 ...

  9. leetcode summary-section II

    151 Reverse Words in a String class Solution { public: void reverseWords(string &s) { string res ...

  10. Java学习-1

    数组 运算符 包 访问权限 修饰符 数组 1. 数组的声明: int[] a; 2. 数组的创建 使用new运算符数组的创建int[] a = new int[100] 数组的长度不要求是常量:new ...