問題003(4点)

1〜100 の整数データをファイルから読みこんで、データの最頻値を出力して終了するプログラムを作成してください。
入力データは、ファイルc:\pckosien\003.txt に保存されているものとします。データ数は100 件以内です。

入力

整数データ(100 件以内)

出力

整数データの最頻値(複数ある場合は、改行してすべて表示)

入力例

5
6
5
8
7
5
9
7
3
4

出力例

5

考え方

データは1から100ですから、数字が出た回数を記録する100個の配列を作成しましょう。
(配列の添字が0からにしかできない言語は、注意しましょう)
入力データが1〜3と仮定した例を示します。

(i)まず、記録する配列を作成する。

[1] [2] [3]
0 0 0

(ii)入力データが1とする。

[1]をひとつ増やしましょう。

[1] [2] [3]
1 0 0

(iii) (ii)を繰り返す。

(iv)全部の入力データが1,2,3,1,2だったとすると、こうなるはず。

[1] [2] [3]
2 2 1

(v)一番多いのを調べる。

複数あるかもしれないことに注意しましょう。
この場合、1と2です。



//
//A003.java
//c:\pckosien\003.txtにデータを保存しておくこと
//

import java.io.*;

public class A003{
    private static final String FILE_NAME="c:\\pckosien\\003.txt";

    public static void main(String[] args)throws IOException{
        //0..99の添字を持つ配列
        int[] data=new int[100];
        BufferedReader br=new BufferedReader(new FileReader(FILE_NAME));

        String buf;
        while((buf=br.readLine())!=null){
            //入力データ(1..100)より1少ない(0..99)の添字の値を1増やす
            data[Integer.parseInt(buf)-1]++;
        }

        //最大値を求める
        int max=0;
        for(int i=0;i<data.length;i++){
            if(data[i]>max){
                max=data[i];
            }
        }

        //最大値と等しかったら出力(1少ないので1足すのを忘れずに!)
        for(int i=0;i<data.length;i++){
            if(data[i]==max){
                System.out.println(i+1);
            }
        }
        br.close();
    }
}


最頻値とは、最も頻度の高い(出現回数が多い)値のことです。
入力例を見てください。
「5」という数値が3 つ、「7」は2 つ、他は1 つです。
このとき、もっとも個数の多い「5」が最頻値となります(出力例)。


正しくゲームをするページ>パソコン甲子園攻略>ココ