没想到什么特殊的方法,就暴力了一把....
想法很简单啊,A点数和>B点数和,找出某个和有几种情况,一乘就可以辣```
但这个8层循环是在让人有点.....小忐忑。。挺好看的到是~~~~~
#include <cstdio>
#include <cmath>
int g[9][50];
double gailv[9][50];
int main()
{
int m, n;
int x,y;
for(x=0;x<9;x++)
{
for(y=0;y<50;y++)
{
g[x][y] = 0;
}
}
for(int i = 1; i <= 6; i++)
{
for(int j = 1; j <= 6; j++)
{
for(int k = 1; k <= 6; k++)
{
for(int a = 1; a <= 6; a++)
{
for(int b = 1; b <= 6; b++)
{
for(int c = 1; c <= 6; c++)
{
for(int d = 1; d <= 6; d++)
{
for(int e = 1; e <= 6; e++)
{
g[8][i+j+k+a+b+c+d+e]++;
}
g[7][i+j+k+a+b+c+d]++;
}
g[6][i+j+k+a+b+c]++;
}
g[5][i+j+k+a+b]++;
}
g[4][i+j+k+a]++;
}
g[3][i+j+k]++;
}
g[2][i+j]++;
}
g[1][i]++;
}
for(int q = 1; q <= 8; q++)
{
for(int i = 1, t = q*6, z = (int)pow(6,q); i <= t ;i++) //有q个筛子
{
gailv[q][i] = (double)g[q][i]/z; //每个值对应的情况,比如6=(2+2+2)*1+(1+2+3)*3=4
} //第q个筛子,和为i时概率
}
while(scanf("%d%d", &m, &n) != EOF && m != 1)
{
double tol = 0.0;
for(int t = 6*m, i = 2; i <= t; i++) // 3 2 for(i=2;i<18,i++)
{
for(int j = 1; j < i; j++) // i为att的点数,j为def的点数,A>B点数即为i>j; for(j=1;i<i;j++)
{
tol += gailv[m][i] * gailv[n][j];
}
}
printf("%.16lf\n",tol);
}
return 0;
}