知恵袋の男女が並ぶ確率の問題をJavaで解いてみました。(^_^;
男子4人女子3人を1列に並べるとき次の事象の確率を求めよ
1、男女が交互に並ぶ
2、女子3人が隣り合う
3、女子が両端にくる
4、女子3人のうちどの2りも隣り合わない
今回は確率なので全順列もカウントして、結果はそれぞれ最大公約数を求めて約分しました。(^_^;
ちなみに、{男女が交互に並ぶ}とは、{男子のうちどの二人も隣り合わない}∧{女子のうちどの二人も隣り合わない}ということですね。(^_^;
● Danjo3.java
/* * Danjo3.java * */ class Danjo3 { static boolean nextPerm(char[] p, int n, int r) { int i, j; char 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 String P = "ABCDabc"; // 男を大文字、女を小文字で表す char[] p = P.toCharArray(); // 順列生成用 int n = p.length; long tm = System.nanoTime(); // Timer Start int[] count = { 0, 0, 0, 0, 0}; do{ String s = new String(p); s+="|"; // 端 for(int i=0; i< n; i++) // 順列の横に男女表を作成 s+=(Character.isUpperCase(p[i]) ? "男" : "女"); s+="|"; count[0]++; // 全順列をカウント if(!s.contains("男男") && !s.contains("女女")) count[1]++; if( s.contains("女女女")) count[2]++; if( s.contains("|女") && s.contains("女|") ) count[3]++; if(!s.contains("女女")) count[4]++; //System.out.println(s); }while(nextPerm(p,n,n)); for(int i=1; i< count.length; i++){ int g = gcd(count[0],count[i]); System.out.printf("(%d) %d / %d = %d / %d\n",i, count[i], count[0], count[i]/g, count[0]/g); } tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
(1) 144 / 5040 = 1 / 35 (2) 720 / 5040 = 1 / 7 (3) 720 / 5040 = 1 / 7 (4) 1440 / 5040 = 2 / 7 Runtime : 0.051 [sec]
※参考URL
http://www.geocities.jp/m_hiroi/java/abcjava04.html
●知恵袋の男女が並ぶ場合の数の問題をJavaで解いてみた。
●知恵袋の男女が並ぶ場合の数の問題をJavaで解いてみた。(2)
- 作者: 中山清喬,国本大悟
- 出版社/メーカー: インプレス
- 発売日: 2014/08/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (19件) を見る
- 作者: 川場隆
- 出版社/メーカー: 秀和システム
- 発売日: 2009/10/23
- メディア: 単行本
- 購入: 14人 クリック: 162回
- この商品を含むブログ (33件) を見る
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)
- 作者: Cay S. Horstmann,柴田芳樹
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る