zoj 3468 Dice War

 没想到什么特殊的方法,就暴力了一把....

想法很简单啊,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;
}
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值