EX10 - 平均との差 Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

説明ページに戻る

問題文

N 人のテストの点数が与えられます。
それぞれの人の点数が平均点から何点離れているか計算してください。

平均点は次の式で求められます。i 番目の人の点数は A_i で表します。

平均点 = \dfrac{A_1 + A_2 + \cdots + A_N}{N}

平均点が整数にならない場合、小数点以下を切り捨てた数値を平均点とします。

例えば 3 人のテストの点数が「2 点、1 点、4 点」だったとき、\frac{2 + 1 + 4}{3} = 2.333 \cdotsなので、平均点は小数点以下を切り捨てて 2 点になります。
そして、平均点から何点離れているかを計算した結果である「0 点、1 点、2 点」が答えになります。
0 点、-1 点、2 点」でも「0 点、1 点、-2 点」でも無いことに注意してください。

ページ末尾に問題のヒントがあります。詰まったら見てみましょう。


サンプルプログラム
N = int(input())
# ここにプログラムを追記


制約

  • 1 \le N \le 1000
  • 0 \le A_i \le 100
  • N, A_i は整数

入力

入力は次の形式で標準入力から与えられます。

N
A_1 A_2 \cdots A_N

出力

それぞれの人の点数が平均点から何点離れているかを1行ずつ出力してください。

1人目の計算結果
2人目の計算結果
\vdots
N人目の計算結果

ジャッジでは以下の入力例以外のケースに関してもテストされることに注意。

入力例1

3
2 1 4

出力例1

0
1
2

問題文中で説明した入出力です。


入力例2

2
80 70

出力例2

5
5

このケースの平均点は 75 点です。
どちらの点数も平均点から 5 点離れています。


入力例3

5
100 100 100 100 100

出力例3

0
0
0
0
0

このケースの平均点は 100 点です。


入力例4

10
53 21 99 83 75 40 33 62 18 100

出力例4

5
37
41
25
17
18
25
4
40
42

ヒント

今回の問題は次のプログラムに追記すれば解くことができます。
追記箇所が2つあることに注意してください。

クリックでヒントプログラムを見る

N = int(input())

# スペース区切りの整数をリストとして受け取る
A = list(map(int, input().split()))

# 合計点
total = 0

# 合計点を計算
for i in range(N):
    # ①ここにプログラムを追記

# 平均点 (Nで割って切り捨てた値)
mean = total // N

# 平均点から何点離れているかを計算して出力
for i in range(N):
    # ②ここにプログラムを追記
    # 負の数を出力しないように注意

テスト入出力

書いたプログラムがACにならず、原因がどうしてもわからないときだけ見てください。

クリックでテスト入出力を見る

テスト入力1
1
80
テスト出力1
0

テスト入力2

データが大きすぎるため省略


解答例

必ず自分で問題に挑戦してみてから見てください。

クリックで解答例を見る

N = int(input())

# スペース区切りの整数をリストとして受け取る
A = list(map(int, input().split()))

# 合計点
total = 0

# 合計点を計算
for i in range(N):
    # ①ここにプログラムを追記
    total += A[i]

# 平均点 (Nで割って切り捨てた値)
mean = total // N

# 平均点から何点離れているかを計算して出力
for i in range(N):
    # ②ここにプログラムを追記
    # 負の数を出力しないように注意
    if A[i] > mean:
        print(A[i] - mean)
    else:
        print(mean - A[i])