[ create a new paste ] login | about

Link: http://codepad.org/5OkQN9DL    [ raw code | output | fork ]

C++, pasted on Dec 29:
#include<stdio.h>
int tr[][6]={{0,0,1,1,2,2},  /* 空空空  時の サイコロの目から、部屋番号への 変換table  */
             {1,2,1,1,2,2},  /* 満空空  以下同様 */
             {0,0,0,2,2,2},  /* 空満空  */
             {2,2,2,2,2,2},  /* 満満空  */
             {0,0,1,1,0,1},  /* 空空満  */
             {1,1,1,1,1,1},  /* 満空満  */
             {0,0,0,0,0,0}};  /* 空満満  */
int l[7],data[6][6];
void f(int depth){
    int i,j,k;
    if(depth<6){
        j = (l[1]!=-1) + 2*(l[3]!=-1) + 4*(l[5]!=-1);  /* 部屋の空満状況を判断 */
        for(i=0;i<6;i++){
            k=2*tr[j][i];
            if(l[k]!=-1)k++;
            l[k]=depth;
            f(depth+1);
            l[k]=-1;
        }
    }else{
        data[l[0]][l[1]]++;        data[l[2]][l[3]]++;        data[l[4]][l[5]]++;
    }
}
int main(){
    for(int i=0;i<7;i++)l[i]=-1;
    f(0);
    for(int i=0;i<6;i++){for(int j=0;j<6;j++)printf("%d ",data[i][j]);printf("\n");}printf("\n");
    for(int i=0;i<6;i++){for(int j=0;j<6;j++)printf("%12.10f ",(double)data[i][j]/216.0/216.0);printf("\n");}
    return 0;
}


Output:
1
2
3
4
5
6
7
8
9
10
11
12
13
0 15552 10368 8640 6048 6048 
0 0 10368 8640 6048 6048 
0 0 0 11232 7344 7344 
0 0 0 0 9072 9072 
0 0 0 0 0 18144 
0 0 0 0 0 0 

0.0000000000 0.3333333333 0.2222222222 0.1851851852 0.1296296296 0.1296296296 
0.0000000000 0.0000000000 0.2222222222 0.1851851852 0.1296296296 0.1296296296 
0.0000000000 0.0000000000 0.0000000000 0.2407407407 0.1574074074 0.1574074074 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.1944444444 0.1944444444 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.3888888889 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 


Create a new paste based on this one


Comments: