PAT——1054. 求平均值
本题的基本要求非常简单:给定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. 求平均值的更多相关文章
- PAT 1054 求平均值 (20)(代码+思路+测试用例)
1054 求平均值 (20)(20 分) 本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是[-1000,1000]区 ...
- PAT 1054 求平均值
https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 本题的基本要求非常简单:给定N个实数,计算它 ...
- PAT 1054. 求平均值 (20)
本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ...
- 1054. 求平均值 (20)-PAT乙级真题
今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...
- PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 凌宸1642
PAT (Basic Level) Practice (中文)1054 求平均值 (20 分) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的 ...
- PAT 乙级 1054 求平均值 (20) C++版
1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...
- PAT(B) 1054 求平均值(Java)
题目链接:1054 求平均值 (20 point(s)) 题目描述 本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输 ...
- PAT-乙级-1054. 求平均值 (20)
1054. 求平均值 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题的基本要求非常简单:给定N个实 ...
- 1054 求平均值 (20 分)C语言
本题的基本要求非常简单:给定 N 个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个"合法"的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 ...
随机推荐
- hdu 2412 Party at Hali-Bula 经典树形DP
Party at Hali-Bula Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- xshell ssh连接linux时提示ssh服务器拒绝了密码
用Xshell root连接时显示ssh服务器拒绝了密码,应该是应该是sshd的设置不允许root用户用密码远程登录 修改 /etc/ssh/sshd_config文件,注意,安装了openssh才会 ...
- eclipse中编写运行c/c++
注意:此过程有点复杂 准备:1.MinGW:c/c++运行环境: 2.CDT 1.MinGW:安装程序:http://sourceforge.net/projects/mingw/?source=ty ...
- js事件队列
前面跟网友讨论到了JS的事件队列 ,对这个有了一些理解,事件队列我认为就是把一些不按顺序执行的事件放到队列里面,然后按照自己制定的顺序去执行,那么什么情况下会用到这个呢?我首先想到的是动画,动画是会执 ...
- js在ie6下的一个bug—未结束标签的错误
在IE6下,如果在body标签没结束前,用代码获取body对象就会出现错误.如: <html> <head> <script type="text/javasc ...
- redis 序列化get、set获取不到原因记录
最近项目里面出现了个bug,把数据从数据库中读取后又存取到redis里面,之后再读取.奇怪的是,有一个 字段读取不到. public class Circle { private String id; ...
- 第一个JavaScript代码
既然我们的CSS就必须要要放再专门的style标签内 那么javascript也需要放在子级的标签内,那就是script标签内 在页面中,我们可以在body标签中放入<script type= ...
- 简说MVC Filter
Filter与FilterProvider之间的关系 根据用途和执行时机的不同,MVC主要分为以下5种类型的过虑器:AuthenticationFilter.AuthorizationFilter.A ...
- [翻译] MGConferenceDatePicker
MGConferenceDatePicker https://github.com/matteogobbi/MGConferenceDatePicker MGConferenceDatePicker ...
- HTML简单框架网页制作 吴昊