知恵袋の色玉の確率の問題を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]
- 作者: 安田亨
- 出版社/メーカー: 東京出版
- 発売日: 2014/08/15
- メディア: 単行本
- 購入: 6人 クリック: 42回
- この商品を含むブログ (16件) を見る
細野真宏の確率が本当によくわかる本 (細野真宏の数学が よくわかる本)
- 作者: 細野真宏
- 出版社/メーカー: 小学館
- 発売日: 2003/08/25
- メディア: 単行本
- 購入: 3人 クリック: 131回
- この商品を含むブログ (14件) を見る
- 作者: 福田邦彦
- 出版社/メーカー: 東京出版
- 発売日: 2004/08/25
- メディア: 単行本
- 購入: 4人 クリック: 18回
- この商品を含むブログ (6件) を見る