知恵袋の男女が並ぶ場合の数の問題をJavaで解いてみた。

 知恵袋の男女が並ぶ場合の数の問題Javaで解いてみました。(^_^;

男子2人、女子3人が一列に並ぶとき次の並びは何通りか
女子3人が隣り合う。

 そういえば、「男女」と言えば、・・・。(^_^;
男女踊ってみた@いとくとら

● Danjo1.java

/*
 * Danjo1.java
 * 
 */

class Danjo1 {
    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);
    }
    
    public static void main(String[] args) {
        final String P = "ABCDE";
        final String M = "男男女女女";
        char[] p = P.toCharArray();     // 順列生成用
        int n = p.length;
        
        long tm = System.nanoTime();    // Timer Start
        int count = 0;
        do{
            String s = new String(p);
            s+=" ";
            for(int i=0; i< n; i++)
                s+=M.charAt(P.indexOf(p[i]));
            if(!s.contains("女女女")) continue;
            // チェックをくぐり抜けたものだけをカウントして表示
            count++;
            System.out.println(s);
        }while(nextPerm(p,n,n));
        System.out.println(count);
        tm=System.nanoTime()-tm;        // Timer Stop
        System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9);
    }
}

●実行結果

ABCDE 男男女女女
ABCED 男男女女女
ABDCE 男男女女女
ABDEC 男男女女女
ABECD 男男女女女
ABEDC 男男女女女
ACDEB 男女女女男
ACEDB 男女女女男
ADCEB 男女女女男
ADECB 男女女女男
AECDB 男女女女男
AEDCB 男女女女男
BACDE 男男女女女
BACED 男男女女女
BADCE 男男女女女
BADEC 男男女女女
BAECD 男男女女女
BAEDC 男男女女女
BCDEA 男女女女男
BCEDA 男女女女男
BDCEA 男女女女男
BDECA 男女女女男
BECDA 男女女女男
BEDCA 男女女女男
CDEAB 女女女男男
CDEBA 女女女男男
CEDAB 女女女男男
CEDBA 女女女男男
DCEAB 女女女男男
DCEBA 女女女男男
DECAB 女女女男男
DECBA 女女女男男
ECDAB 女女女男男
ECDBA 女女女男男
EDCAB 女女女男男
EDCBA 女女女男男
36
Runtime : 0.019 [sec]

※参考URL
知恵袋の男女が並ぶ場合の数の問題をJavaで解いてみた。(2)
知恵袋の男女が並ぶ確率の問題をJavaで解いてみた。

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

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

わかりやすいJava入門編

わかりやすいJava入門編

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)