思考する三角形▽

プログラミング初心者によるAtCoder解答解説

A - Thumbnail

コメント歓迎です。
第5回 ドワンゴからの挑戦状 予選の問題です。

方針

まず整数列aの平均値を求めます。

求めた平均値と整数列の値の差をひとつずつ計算し、差が最小のときのフレーム番号を出力します。

整数列の0番から順に差を評価していき、現時点での最小値よりも小さければ最小値を更新します。
最小値と同じ差になる場合でも、0番目から評価していくので最初に最小値となったフレーム番号を保持できます。

コード(AC)

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main(){
  // 入力
  int N;
  cin >> N;

  vector<double> a(N, 0);
  for (int i = 0; i < N; i++) {
    cin >> a[i];
  }

  double sum = 0; // 要素の合計値
  double ave = 0; // 要素の平均値
  double tmp = 101; // 平均値との差を比較するための変数
  int ans = 0;

  // 合計値の計算
  for (int i = 0; i < N; i++) {
    sum += a[i];
  }
  // 平均値の計算
  ave = sum / N;
  
  // 全探索
  for (int j = 0; j < N; j++) {
    // 現時点での最小値よりも小さい場合
    if (abs(a[j] - ave) < tmp) {
      tmp = abs(a[j] - ave); // 最小値を更新
      ans = j; // 更新したらそのフレーム番号を記録
    }
  }
  // 出力
  cout << ans << endl;
}