判断推理の順序関係の問題をJavaで解いてみた。(3)

 OKWaveで見つけた判断推理の順序関係の問題Javaで解いてみました。(^_^;
 こういう類の問題は、プログラムを作って解けても自分で解けないと何の役にも立たないのですが、敢えて、役に立たないことをやってみるのも、また乙なものです。(^_^;

 ある会社のA〜Eの5つの支店について、それぞれの支店の社員数を調べたところ、次のア〜エのことが分かった。
ア・社員数が最も多いのはC支店であり、C支店の社員数は45人であった。
イ・社員数が2番目に多い支店とC支店との社員数の差は2人であった。
ウ・A支店とD支店との社員数の差は2人、B支店とD支店との社員数の差は3人、D支店とE支店との社員数の差は4人であった。
エ・A〜Eの5つの支店の社員数の平均は40人であった。

 以上から判断して、社員数が3番目に多い支店と4番目に多い支店との組み合わせとして、正しいのはどれか。

I・3番目:A 4番目:B
II・3番目:B 4番目:D
III・3番目:B 4番目:E
IV・3番目:D 4番目:A
V・3番目:D 4番目:E

●EmployeeNumber.java

/* 
 * EmployeeNumber.java
 * 
 */

import java.util.Arrays;

public class EmployeeNumber {
    // xがa[]の何番目にあるか調べるメソッド
    static int getPos(int[] a, int x) {
        for(int i=0; i< a.length; i++)
            if(a[i]==x) return(i);  // あるときは、0〜a.length-1を返す. 
        return(-1);                 // ないときは、-1を返す. 
    }
    
    // a[]の中で n 番目に大きな数値を取得するメソッド
    static int Large(int[] a, int n) {
        int m=a.length;
        int[] b = (int[])a.clone();     // a[]に影響を与えないようにするため
        Arrays.sort(b);
        if(n< 1 || m< n) n=1;           // n が範囲外の時は、n=1
        return(b[m-n]);
    }
    
    static char getNameOfLarge(int[] a, int x) {
        return( "ABCDE".charAt(getPos(a,Large(a,x))) );
    }
    
    public static void main(String[] args) {
        final int c = 45;                                       //  条件ア
        int a,b,d,e;
        long tm=System.nanoTime();      // Timer Start
        
        for(d=1; d< c; d++){
            for(a=d-2; a<=d+2 && 0< a && a< c; a+=2*2){         // 条件ウ
                for(b=d-3; b<=d+3 && 0< b && b< c; b+=3*2){     // 条件ウ
                    for(e=d-4; e<=d+4 && 0< e && e< c; e+=4*2){ // 条件ウ
                        if(a+b+c+d+e!=40*5)     continue;       // 条件エ
                        int[] n = new int[] {a,b,c,d,e};
                        if(c-Large(n,2)!=2)     continue;       // 条件イ
                        // チェックを潜り抜けたものだけを表示
                        System.out.println(Arrays.toString(n));
                        System.out.println( "3番目: "+getNameOfLarge(n,3) );
                        System.out.println( "4番目: "+getNameOfLarge(n,4) );
                    }
                }
            }
        }
        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

[37, 36, 45, 39, 43]
3番目: D
4番目: A
Runtime : 0.001 [sec]

※参考URL
判断推理の順序関係の問題を自分で解いてみた。

明解Java 入門編

明解Java 入門編

読みながらマスターする たのしいJava入門

読みながらマスターする たのしいJava入門