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; }