java-1012 数字分类 (20)【满分是不可能满分的】

常在河边走,哪能不湿鞋?用java写PTA终于被制裁了哈哈哈哈。有几个死活过不去,没办法,上网上搜,网上的基本都是全部超时,我的还是部分超时QAQ。

一、题干

1012 数字分类 (20)(20 分)

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

A1 = 能被5整除的数字中所有偶数的和;

A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;

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

二、分析

老规矩,数据获取:

public static int[] getData() throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String string = bufferedReader.readLine();
        String[] targetString = string.split(" ");
        int size = Integer.parseInt(targetString[0]);
        int[] target = new int[size];
        for (int i = 0 ; i < target.length ; i ++)
            target[i] = Integer.parseInt(targetString[i + 1]);
        return target;
    }

之后就是进行数据的处理,得出中间结果(我贴的是主操作流程的代码):

public static void main() throws IOException {
        int[] target = getData();
        int A1Sum = 0;//A1结果
        int A2Count = 0;//A2计数变量
        int A2Sum = 0;//A2结果
        int A3Count = 0;//A3结果
        int A4Sum = 0;//A4求和
        int A4Count = 0;//A4计数
        boolean A2F = true;//因为可能A2Count得到的是0
        int A5Max = 0;
        for (int i = 0 ; i < target.length ; i ++) {
            switch (target[i] % 10) {
                case 1:
                case 6:
                    if (A2Count % 2 == 0)
                        A2Sum += target[i];
                    else
                        A2Sum -= target[i];
                    A2Count ++;
                    A2F = false;
                    break;
                case 2:
                case 7:
                    A3Count ++;
                    break;
                case 3:
                case 8:
                    A4Sum += target[i];
                    A4Count ++;
                    break;
                case 4:
                case 9:
                    if (target[i] > A5Max)
                        A5Max = target[i];
                    break;
                case 0:
                    A1Sum += target[i];
                    break;
            }
        }
        convert(A1Sum, A2Sum, A2F, A3Count, A4Sum, A4Count, A5Max);
    }

最后是将中间结果转化成格式化的输出

public static void convert(int a1, int a2, boolean A2F, int a3, int a4, int a4p, int a5) {
        StringBuilder stringBuilder = new StringBuilder();
        if (a1 == 0) {
            stringBuilder.append("N ");
        } else {
            stringBuilder.append(a1 + " ");
        }
        if (A2F) {
            stringBuilder.append("N ");
        } else {
            stringBuilder.append(a2 + " ");
        }
        if (a3 == 0) {
            stringBuilder.append("N ");
        } else {
            stringBuilder.append(a3 + " ");
        }
        if (a4p == 0) {
            stringBuilder.append("N ");
        } else {
            double result = a4 / (double)a4p;
            DecimalFormat decimalFormat = new DecimalFormat("#.0");
            stringBuilder.append(decimalFormat.format(result) + " ");
        }
        if (a5 == 0) {
            stringBuilder.append("N");
        } else {
            stringBuilder.append(a5);
        }
        System.out.println(stringBuilder.toString());
    }

有点长,不过也没啥,值得注意的是格式化double类型的值我用了DecimalFormat,反正网上也能搜到

最后是调用语句:

public static void main(String[] args) throws IOException {
        main();//真是简洁到让人想哭的调用语句
    }

只能通过三个用例,但是牛客网上可以通过全部。

真令人绝望~

展开阅读全文

没有更多推荐了,返回首页