判断推理のカードの問題をJavaで解いてみた。

 判断推理のカードの問題Javaで解いてみました。(^_^;

 1〜9の数字が書かれたカードが1枚ずつあり、このカードをABCDEFの6人に配った。
A〜Fが、自分のカードの数字を合計したところ、それぞれ、10,4,7,12,3,9であった。
どの人も3枚以上は受け取っていないものとして、確実にいえることは次のうちどれか。

1.1のカードはEが持っている
2.2のカードはCが持っている
3.3のカードはFが持っている
4.4のカードはCが持っている
5.5のカードはDが持っている

●Card01.java

/*
 * Card01.java
 * 
 */

class Card01 {
    static void swap(int[] s, int i, int j) {
        int t = s[i]; s[i] = s[j]; s[j] = t;
    }
    
    static boolean next_perm(int[] 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);
    }
    
    public static void main(String[] args) {
        int[] p={0,0,0,1,2,3,4,5,6,7,8,9};
        long tm=System.nanoTime();            // Timer Start
        
        do_cont:
        do{
            for(int i=0; i< 12; i+=2)
                if(p[i]>=p[i+1]) continue do_cont;
            if(p[ 0]+p[ 1]!=10) continue;   // Aの合計
            if(p[ 2]+p[ 3]!= 4) continue;   // Bの合計
            if(p[ 4]+p[ 5]!= 7) continue;   // Cの合計
            if(p[ 6]+p[ 7]!=12) continue;   // Dの合計
            if(p[ 8]+p[ 9]!= 3) continue;   // Eの合計
            if(p[10]+p[11]!= 9) continue;   // Fの合計
            
            // チェックを潜り抜けたものだけを表示
            System.out.printf("A:%2d,%2d\n",p[ 0],p[ 1]);
            System.out.printf("B:%2d,%2d\n",p[ 2],p[ 3]);
            System.out.printf("C:%2d,%2d\n",p[ 4],p[ 5]);
            System.out.printf("D:%2d,%2d\n",p[ 6],p[ 7]);
            System.out.printf("E:%2d,%2d\n",p[ 8],p[ 9]);
            System.out.printf("F:%2d,%2d\n",p[10],p[11]);
            System.out.println();
        }while(next_perm(p,12,12));

        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

A: 2, 8
B: 0, 4
C: 1, 6
D: 5, 7
E: 0, 3
F: 0, 9

Runtime : 3.332 [sec]

判断推理がみるみるわかる! 解法の玉手箱[改訂版]

判断推理がみるみるわかる! 解法の玉手箱[改訂版]

公務員試験 判断推理必殺の解法パターン

公務員試験 判断推理必殺の解法パターン