1. 程式人生 > >java-1012 數字分類 (20)【滿分是不可能滿分的】

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();//真是簡潔到讓人想哭的呼叫語句
    }

只能通過三個用例,但是牛客網上可以通過全部。

真令人絕望~