題目描述

給定一個整數陣列,分別計算並輸出其中元素數值之正整數、負整數和零的佔有比例。



輸出的比例是一個0~1(包含0和1)的浮點數數值,精確度需至小數點後六位。

原題網址

輸入格式

第一行輸入一個整數N,表示陣列的大小。接下來的一行,共有N個整數,用空格隔開,照順序表示陣列內的元素。

輸出格式

輸出共有三行,第一行是正整數所佔的比例,第二行是負整數所佔的比例,第三行是零所佔的比例。輸出的比例是一個0~1(包含0和1)的浮點數數值,精確度需至小數點後六位。

範例輸入

6
-4 3 -9 0 4 1

範例輸出

0.500000
0.333333
0.166667

額外解釋

範例中輸入的陣列共有6個整數元素,分別是3個正整數,2個負整數,和一個零。

正整數所佔的比例是:

3 / 6 = 0.500000

負整數所佔的比例是:

2 / 6 = 0.333333

零所佔的比例是:

1 / 6 = 0.166667

解題概念

使用Scanner物件直接從標準輸入串流中讀取,N和之後的N個整數,在讀取的過程中就可以去計算正整數、負整數和零的數量了。接著建立出一個DecimalFormat物件,樣板字串使用「0.000000」,接著就可以用其「format」方法,來將浮點數格式化為精確度達小數點後第六位的字串。將分別統計出來的數量除以總數,就是其所佔有的比例。

參考答案

import java.util.Scanner;
import java.text.DecimalFormat;

public class Solution {
    
    public static void main(final String[] args) throws Exception {
        final Scanner sc = new Scanner(System.in);
        final int n = sc.nextInt();
        int positive = 0;
        int zero = 0;
        for (int i = 0; i < n; ++i) {
            final int v = sc.nextInt();
            if (v > 0) {
                ++positive;
            } else if (v == 0) {
                ++zero;
            }
        }
        final DecimalFormat df = new DecimalFormat("0.000000");
        System.out.println(df.format(positive * 1.0 / n));
        System.out.println(df.format((n - positive - zero) * 1.0 / n));
        System.out.println(df.format(zero * 1.0 / n));
    }
}