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

 判断推理の順序関係の問題Javaで解いてみました。(^_^;

 A〜Gの7人が体育祭で短距離走をしたところ、次のア〜カの結果であった。
このことから判断して妥当なものはどれか?ただし、同着はいなかったものとする。
ア AはBよりは後に、Gより先にゴールした。
イ Bは1番目にゴールしなかった。
ウ Dは5番目にゴールしなかった。
エ Cの次にEがゴールした。
オ Fの直前にDがゴールした。
カ EとFの間に3人がゴールした。
 選択肢
1 Aが1番目にゴールした。
2 Bは3番目にゴールした。
3 Cは2番目にゴールした。
4 Dは6番目にゴールした。
5 Eは7番目にゴールした。

●Rank01.java

/*
 * Rank01.java
 * 
 */

class Rank01 {
    static final String RUNNER="ABCDEFG";

    static void swap(char[] s, int i, int j) {
        char t = s[i]; s[i] = s[j]; s[j] = t;
    }
    
    static boolean next_perm(char[] p, int n, int r) {
        int i, j, k;
        if(r <= 0 || n < r) return(false);
        for(i = r + 1; i <= n-1; i++)
            for(j = i; j >= r + 1 && p[j-1] < p[j]; j--)
                swap(p,j,j-1);
        for(i = n - 1; i > 0 && p[i-1] >= p[i]; i--);
        if(i==0) return(false);
        for(j = n - 1; j > i && p[i-1] >= p[j]; j--);
        swap(p,j,i-1);
        for(k = 0; k <= (n-i-1)/2; k++)
            swap(p,i+k,n-k-1);
        return(true);
    }
    
    // xがa[]の何番目にあるか調べるメソッド
    static int getPos(char[] a, char x) {   
        for(int i=0; i<a.length; i++)
            if(a[i]==x) return(i);  // あるときは、0〜a.length-1を返す. 
        return(-1);                 // ないときは、-1を返す. 
    }
    
    public static void main(String[] args) {
        char[] r=RUNNER.toCharArray();
        boolean[] c={true,true,true,true,true};
        long tm=System.nanoTime();      // Timer Start
        
        do{
            //if(!()) continue; // 条件
            if(!(getPos(r,'B')< getPos(r,'A'))) continue;               // 条件ア
            if(!(getPos(r,'A')< getPos(r,'G'))) continue;               // 条件ア
            if(!(getPos(r,'B')+1!=1)) continue;                         // 条件イ
            if(!(getPos(r,'D')+1!=5)) continue;                         // 条件ウ
            if(!(getPos(r,'C')+1==getPos(r,'E'))) continue;             // 条件エ
            if(!(getPos(r,'F')-1==getPos(r,'D'))) continue;             // 条件オ
            if(!(Math.abs(getPos(r,'E')-getPos(r,'F'))==3+1)) continue; // 条件カ
            
            // チェックを潜り抜けたものだけを表示
            System.out.println("#: 1234567");
            System.out.println("R: "+new String(r));
            System.out.println();
            // 選択肢のチェック
            if(getPos(r,'A')+1==1) c[0]&=true; else c[0]&=false;
            if(getPos(r,'B')+1==3) c[1]&=true; else c[1]&=false;
            if(getPos(r,'C')+1==2) c[2]&=true; else c[2]&=false;
            if(getPos(r,'D')+1==6) c[3]&=true; else c[3]&=false;
            if(getPos(r,'E')+1==7) c[4]&=true; else c[4]&=false;
        }while(next_perm(r,7,7));
        System.out.print("∴");
        for(int i=0; i< 5; i++)
            if(c[i]) System.out.println(" "+(i+1));
        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

#: 1234567
R: DFBACEG

∴ 2
Runtime : 0.003 [sec]

畑中敦子の判断推理の新兵器!(公務員試験/畑中敦子シリーズ)

畑中敦子の判断推理の新兵器!(公務員試験/畑中敦子シリーズ)

上・中級公務員 標準判断推理―確かな解答力が身につく“基本書”

上・中級公務員 標準判断推理―確かな解答力が身につく“基本書”

公務員試験 新スーパー過去問ゼミ3 判断推理 (公務員試験新スーパー過去問ゼミ3)

公務員試験 新スーパー過去問ゼミ3 判断推理 (公務員試験新スーパー過去問ゼミ3)