PAT(Basic Level)乙级真题 # 1012 数字分类 #

1012 数字分类 (20 分)

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • A​1​​ = 能被 5 整除的数字中所有偶数的和;
  • A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;
  • A​3​​ = 被 5 除后余 2 的数字的个数;
  • A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位; 
  • A​5​​ = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 N 个正整数,按题目要求计算 A​1​​~A​5​​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出 N

输入样例 1:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例 1:

30 11 2 9.7 9

输入样例 2:

8 1 2 4 5 6 7 9 16

输出样例 2:

N 11 2 N 9

 解题思路:

  • 使用5个list集合A1--A5,对满足条件A1--A5的数分别存入对应集合
  • 分别对A1--A5集合所存数字进行计算,得到题目要求结果
  • 此方法需要注意空指针异常,因为集合可能为空

Java代码实现: 

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Scanner;

public class NumberClassify {
    public static void main(String[] args) {
        //定义5个list集合,用于存放满足条件的5种数字
        ArrayList<Integer> A1 = new ArrayList<>();
        ArrayList<Integer> A2 = new ArrayList<>();
        ArrayList<Integer> A3 = new ArrayList<>();
        ArrayList<Integer> A4 = new ArrayList<>();
        ArrayList<Integer> A5 = new ArrayList<>();
        //输入测试用例个数
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        //循环输入测试样例
        for (int i = 0; i < N; i++) {
            int number = sc.nextInt();
            //A1:能被5整除的数字中所有偶数
            if(number%5 == 0 && number%2 == 0){
                A1.add(number);
            }
            //A2: 被 5 除后余 1 的数字
            if (number%5 == 1){
                A2.add(number);
            }
            //A3: 被 5 除后余 2 的数字
            if (number%5 == 2){
                A3.add(number);
            }
            //A4: 被 5 除后余 3 的数字
            if (number%5 == 3){
                A4.add(number);
            }
            //A5: 被 5 除后余 4 的数字
            if (number%5 == 4){
                A5.add(number);
            }
        }
        //A​1​​ = 能被 5 整除的数字中所有偶数的和
        int sumA1 = 0;
        for (Integer integer : A1) {//增强for循环
            sumA1 += integer;
        }
        //A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯
        int sumA2 = 0;
        for (int i = 0; i < A2.size(); i++) {
            if (i%2==0){
                sumA2 += A2.get(i);
            }else {
                sumA2 -= A2.get(i);
            }
        }
        //A​3​​ = 被 5 除后余 2 的数字的个数
        int countA3 = A3.size();
        //A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位
        double countA4 = A4.size();
        BigDecimal averageA4 = new BigDecimal("0");
        if(countA4 != 0){
            double sum = 0;
            for (Integer integer : A4) {
                sum += integer;
            }
            BigDecimal b1 = new BigDecimal(sum);
            BigDecimal b2 = new BigDecimal(countA4);
            averageA4 = b1.divide(b2, 1, BigDecimal.ROUND_HALF_UP);
        }
        //A​5​​ = 被 5 除后余 4 的数字中最大数字
        //int maxA5 = A5.get(0); 如果A5为空会导致空指针异常,找了好久才找到
        int maxA5 = -1;
        for (Integer integer : A5) {
            maxA5 = maxA5 > integer ? maxA5 : integer;
        }
        //输出,如果集合为空输出N
        if(A1.isEmpty()){
            System.out.print("N ");
        }else {
            System.out.print(sumA1+" ");
        }
        if(A2.isEmpty()){
            System.out.print("N ");
        }else {
            System.out.print(sumA2+" ");
        }
        if(A3.isEmpty()){
            System.out.print("N ");
        }else {
            System.out.print(countA3+" ");
        }
        if(A4.isEmpty()){
            System.out.print("N ");
        }else {
            System.out.print(averageA4+" ");
        }
        if(A5.isEmpty()){
            System.out.print("N");
        }else {
            System.out.print(maxA5);
        }
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值