知恵袋の色玉の確率の問題をJavaで解いてみた。

 知恵袋の色玉の確率の問題Javaで解いてみました。(^_^;

色だけで区別する玉が赤4個、白3個、青2個ある。これを1個ずつ3回とる。
1回目と3回目に違う色の玉がでる確率は?

 色玉に次のように番号をつけると、番号を4で割った商がそれぞれの色を表します。

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

● ProBall1.java

/* 
 * ProBall1.java
 * 
 * 赤玉(0): 0,1,2,3
 * 白玉(1): 4,5,6
 * 青玉(2): 8,9
 * 
 */

public class ProBall1 {
    // 順列生成
    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) {
        int[] p = {0,1,2,3,4,5,6,8,9};
        int iTotal=0, iCount=0, g=1;
        
        long tm=System.currentTimeMillis(); // Timer Start
        do{
            iTotal++;
            if(p[0]/4!=p[2]/4) iCount++;
        }while(nextPerm(p,9,3));
        
        if(iCount!=0) g=gcd(iCount, iTotal);
        System.out.printf("%d / %d = %d / %d\n",iCount,iTotal,iCount/g,iTotal/g);
        tm=System.currentTimeMillis()-tm;   // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1000.0);
    }
}

●実行結果

364 / 504 = 13 / 18
Runtime : 0.015 [sec]

ハッとめざめる確率

ハッとめざめる確率

細野真宏の確率が本当によくわかる本 (細野真宏の数学が よくわかる本)

細野真宏の確率が本当によくわかる本 (細野真宏の数学が よくわかる本)

解法の探求・確率―大学への数学

解法の探求・確率―大学への数学