PAT乙级1012 数字分类(Java)

1012 数字分类

分数 20
作者 CHEN, Yue
单位 浙江大学
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
A1= 能被 5 整除的数字中所有偶数的和;
A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和;
A3= 被 5 除后余 2 的数字的个数;
A4= 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A5= 被 5 除后余 4 的数字中最大数字。
输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:
对给定的 N 个正整数,按题目要求计算 A1~A5,并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若分类之后某一类不存在数字,则在相应位置输出 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

思路:

根据取余结果,用switch-case到对应位置计算。
用vis数组记录该类是否存在数字。
import java.util.Scanner;
public class Main {
    public static void main(String[] args)
    {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int a1=0,a2=0,a3=0,count=0,a5=0;
        double a4=0;
        boolean[] vis=new boolean[5];
        int tag=1;
        for(int i=0;i<n;i++)
        {
            int a=in.nextInt();
            int t=a%5;
            switch (t)
            {
                case 0:
                    if(a%2==0)
                    {
                        vis[t]=true;
                        a1+=a;
                    }
                    break;
                case 1:
                    vis[t]=true;
                    a2+=tag*a;
                    tag*=-1;//使tag按照1 -1 1 -1...的顺序循环变化
                    break;
                case 2:
                    vis[t]=true;
                    a3++;
                    break;
                case 3:
                    vis[t]=true;
                    a4+=a;
                    count++;
                    break;
                case 4:
                    vis[t]=true;
                    if(a>a5)a5=a;
                    break;
            }
        }
        if(vis[0])System.out.print(a1);
        else System.out.print('N');
        System.out.print(' ');
        if(vis[1])System.out.print(a2);
        else System.out.print('N');
        System.out.print(' ');
        if(vis[2])System.out.print(a3);
        else System.out.print('N');
        System.out.print(' ');
        if(vis[3])System.out.printf("%.1f",a4/count);
        //Java中double类型和float类型都用%f
        else System.out.print('N');
        System.out.print(' ');
        if(vis[4])System.out.print(a5);
        else System.out.print('N');
    }
}
### PAT乙级1116题目的Java实现 #### 题目背景 PAT(Programming Ability Test)是一个用于评估编程能力的考试平台,其中乙级难度主要面向初学者。对于特定题目如1116,其核心在于理解输入输出的要求以及算法设计。 #### 解决方案概述 根据已知的信息[^1],在处理PAT乙级测试时,Java由于I/O操作较慢可能面临性能瓶颈。因此,在解决具体问题前需优化读取和写入逻辑。以下是基于引用中的方法构建的一个通用框架,并结合实际需求完成1116题的具体实现。 #### Java代码实现 以下为PAT乙级1116题的一种标准解决方案: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入字符串并去除首尾空白字符 String input = scanner.nextLine().trim(); // 初始化变量存储统计结果 int letterCount = 0; int spaceCount = 0; int digitCount = 0; int otherCount = 0; // 遍历字符串逐个字符判断类别 for (int i = 0; i < input.length(); i++) { char ch = input.charAt(i); if (Character.isLetter(ch)) { // 判断字母 letterCount++; } else if (ch == ' ') { // 判断空格 spaceCount++; } else if (Character.isDigit(ch)) { // 判断数字 digitCount++; } else { // 其他字符 otherCount++; } } // 输出最终的结果 System.out.println(letterCount); System.out.println(spaceCount); System.out.println(digitCount); System.out.println(otherCount); scanner.close(); } } ``` 上述代码实现了对给定字符串中不同类型的字符计数功能,分别计算英文字母、空格、数字以及其他字符的数量[^2]。 #### 关键点说明 - **Scanner类**:虽然`BufferedReader`效率更高,但对于简单场景下使用`Scanner`可以简化开发流程。 - **分类条件**:利用`Character`内置函数区分各类字符,确保准确性[^3]。 - **资源管理**:调用`scanner.close()`释放资源,防止潜在内存泄漏问题[^4]。 #### 性能考量 尽管此版本能够满足大部分情况下的时间约束,但在极端大数据量情况下仍建议采用更高效的流式处理方式替代传统的逐字符扫描机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值