題目描述
給定一個整數陣列,分別計算並輸出其中元素數值之正整數、負整數和零的佔有比例。
輸出的比例是一個0~1(包含0和1)的浮點數數值,精確度需至小數點後六位。
原題網址
輸入格式
第一行輸入一個整數N,表示陣列的大小。接下來的一行,共有N個整數,用空格隔開,照順序表示陣列內的元素。
輸出格式
輸出共有三行,第一行是正整數所佔的比例,第二行是負整數所佔的比例,第三行是零所佔的比例。輸出的比例是一個0~1(包含0和1)的浮點數數值,精確度需至小數點後六位。
範例輸入
6
-4 3 -9 0 4 1
-4 3 -9 0 4 1
範例輸出
0.500000
0.333333
0.166667
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));
}
}