寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume16 - 1624 : Income Inequality

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題: "Income Inequality"

onlinejudge.u-aizu.ac.jp
統計データを処理する際,真っ先に平均値を計算することが多い. 確かに,平均値は,データの傾向を把握するためのよい指標だが,常に最善とは限らない. 場合によっては,平均値がデータの理解を妨げることもある.

たとえば,国民所得を考えてみよう. 所得格差という言葉が示すように,少数の人が国民所得の大部分を得ている国が多い. このような場合,所得の平均値は,大多数の国民の所得よりはるかに高くなってしまう. 平均値を典型的な国民の所得と見なすのは間違いである.

以上のような事情を具体的なデータで検証してみよう. n 人の人の所得 a1,… ,an が与えられる. その中で,平均値 (a1 + … + an) / n 以下の所得の人の人数を答えるプログラムを書いてほしい.

僕が作成、提出したコードは、以下のとおりです。

Aizu Online Judge in C++ #Volume16 - 1624 : Income Inequality
/*
Aizu Online Judge in C++ #Volume16 - 1624 : Income Inequality
https://onlinejudge.u-aizu.ac.jp/problems/1624
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
    while(1){
        int n;
        cin>>n;
        if(n==0){
            return 0;
        }
        vector<int> a(n);
        int sum=0;
        for(int i=0;i<n;i++){
            cin>>a[i];
            sum+=a[i];
        }
        sum/=n;
        int cnt=0;
        for(int i=0;i<n;i++){
            if(a[i]<=sum){
                cnt++;
            }
        }
        cout<<cnt<<endl;
    }
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/