[BOJ]1546(ブロンズ1)


平均

  • 質問する
    勢俊は期末試験に失敗した.勢俊は点数を偽造して家に持ち帰ることにした.まず勢俊は自分の点数の中で最高値を選んだ.この値をMと言います.そしてすべての点数を点数/M*100に変更しました.
    例えば、ポテンシャル俊の最高点数が70で、数学点数が50であれば、数学点数は50/70*100で71.43点である.
    上記の方法で勢俊の成績を再計算する場合は、新しい平均値を求めるプログラムを作成してください.
    入力
    1行目は試験科目の個数Nを与える.この値は1000以下です.2列目は勢俊の今の成績をあげた.この値は100以下の整数ではなく、少なくとも1つの値が0より大きい.
    しゅつりょく
    最初の行に新しい平均値を出力します.実際の正解と出力値の絶対誤差または相対誤差が10−2以下であることが正解である.
    入力例1
    3
    40 80 60
    サンプル出力1
    75.0
    入力例2
    3
    10 20 30
    サンプル出力2
    66.666667
  • 10^2以下の誤差を許容することは、少数の2番目のビットに出力することを意味しない.
  • 入力例3
    4
    1 100 100 100
    サンプル出力3
    75.25
    入力例4
    5
    1 2 4 8 16
    サンプル出力4
    38.75
    入力例5
    2
    3 10
    サンプル出力5
    65.0
    入力例6
    4
    10 20 0 100
    サンプル出力6
    32.5
    入力例7
    1
    50
    サンプル出力7
    100.0
    入力例8
    9
    10 20 30 40 50 60 70 80 90
    サンプル出力8
    55.55555555555556
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
    
            double[] array = new double[T];
    
            double max = 0;
            double result = 0;
    
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            for (int i = 0; i < T; i++) {
                array[i] = Integer.parseInt(st.nextToken());
            }
    
            Arrays.sort(array);
            max = array[array.length - 1];
    
            for (int i = 0; i < T; i++) {
                double val = array[i]/max*100;
                array[i] = (int) Math.round(val);
            }
    
            for (double average : array){
                result += average;
            }
    
            System.out.println(result/T);
    
        }
    }