知恵袋の白玉と赤玉の原因の確率の問題をJavaで解いてみた。

 知恵袋の白玉と赤玉の原因の確率の問題Javaで解いてみました。(^_^;

白玉7個、赤玉3個が入っている袋から、玉を1個取り出し、それを袋に戻さないで、続いてもう1個取り出す。2番目に取り出した玉が赤玉であるとき、最初に取り出した玉も赤玉である確率を求めよ。

 確率の問題では見た目が同じものでも区別して考えるので、次のように玉に番号を与えて、その番号を7で割った商でそれぞれの色を得ることにします。

白玉(0): 0,1,2,3,4,5,6,
赤玉(1): 7,8,9

 ちなみに、「原因の確率」とは、時間的に逆行する条件付き確率のことらしい。

● WRCondProb1.java

/* 
 * WRCondProb1.java
 * 
 * N=10, R=2
 * 白玉(0): 0,1,2,3,4,5,6
 * 赤玉(1): 7,8,9
 * 
 * 7で割った商で色を得る
 */

public class WRCondProb1 {
    // 順列生成
    static boolean nextPerm(int[] p, int n, int r) {
        int i, j;
        int t;
        
        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--){
                t = p[j]; p[j] = p[j-1]; p[j-1] = t;    // 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--);
        t = p[j]; p[j] = p[i-1]; p[i-1] = t;            // swap(p,j,i-1);
        for(j = n - 1; i < j; i++, j--){
            t = p[i]; p[i] = p[j]; p[j] = t;            // swap(p,i,j);
        }
        return(true);
    }
    // 最大公約数
    static int gcd(int a, int b){ return( b == 0 ? a : gcd(b, a % b) ); }
    
    public static void main(String[] args) {
        final int N = 10, R = 2;
        int total = 0, count = 0;
        int[] p = new int[N];
        for(int i = 0; i< 10; i++) p[i] = i;
        
        long tm=System.nanoTime();      // Timer Start
        do{
            if(p[1]/7==1) {
                total++;
                if(p[0]/7==1) count++;
            }
        }while(nextPerm(p,N,R));
        int g = (count*total!=0) ? gcd(count,total) : 1;
        System.out.printf("%d / %d = %d / %d\n", count, total, count/g, total/g);
        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

6 / 27 = 2 / 9
Runtime : 0.023 [sec]

※参考URL
条件付き確率
条件付き確率の意味といろんな例題 | 高校数学の美しい物語
原因の確率(時間的に逆行する条件付き確率) | 受験の月

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)