EX13 - 1.13 Editorial /

Time Limit: 2 sec / Memory Limit: 256 MB

説明ページに戻る

問題文

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

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

平均点 = \frac{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点」でも無いことに注意してください。

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


サンプルプログラム
#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;
}

制約

  • 1≦N≦1000
  • 0≦A_i≦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つあることに注意してください。

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

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;

  // N要素の配列
  vector<int> A(N);

  // 入力処理
  for (int i = 0; i < N; i++) {
    cin >> A.at(i);
  }

  // 合計点
  int sum = 0;

  // 合計点を計算
  for (int i = 0; i < N; i++) {

    // ①ここにプログラムを追記

  }

  // 平均点
  int mean = sum / N;

  // 平均点から何点離れているかを計算して出力
  for (int i = 0; i < N; i++) {

    // ②ここにプログラムを追記
    // 負の数を出力しないように注意

  }
}


テスト入出力

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

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

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

テスト入力2

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


解答例

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

クリックで解答例を見る

#include <bits/stdc++.h>
using namespace std;

int main() {
  int N;
  cin >> N;

  // N要素の配列
  vector<int> A(N);

  // 入力処理
  for (int i = 0; i < N; i++) {
    cin >> A.at(i);
  }

  // 合計点
  int sum = 0;

  // 合計点を計算
  for (int i = 0; i < N; i++) {

    // ①ここにプログラムを追記
    sum += A.at(i);

  }

  // 平均点
  int mean = sum / N;

  // 平均点から何点離れているかを計算して出力
  for (int i = 0; i < N; i++) {

    // ②ここにプログラムを追記
    // 負の数を出力しないように注意
    if (A.at(i) > mean) {
      cout << A.at(i) - mean << endl;
    }
    else {
      cout << mean - A.at(i) << endl;
    }

  }

}