您的位置:首页 > 其它

玩骰子(概率,暴力)

2015-12-01 08:42 387 查看
暴力就行,不过要注意,如果一开始就赢了,那么就不用再置骰子了那么就为1了。

#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<math.h>
int kk();
using namespace std;
typedef long long ll;
int a[7];
int b[4];
int c[4];
int d[4];
int main(void)
{
int n,i,j,k,p,q,s;
scanf("%d",&k);
while(k--)
{
for(i=1; i<=3; i++)
{
scanf("%d",&b[i]);
c[i]=b[i];
}
for(i=1; i<=3; i++)
{
scanf("%d",&a[i]);
d[i]=a[i];
}
int nn=kk();
double sum;
if(nn==1)
{
sum=1;
}
else
{
int uu=0;
for(i=1; i<=3; i++)
{

int rr=0;
for(s=1; s<=6; s++)
{
for(j=1; j<=3; j++)
{
c[j]=b[j];
}
c[i]=s;
rr+=kk();
}
if(rr>uu)
{
uu=rr;
}

}
sum=1.0*uu/6;

}
printf("%.3f\n",sum);
}
return 0;

}

int kk()
{
int i,j,k,p,q;
sort(c+1,c+4);
sort(d+1,d+4);
int cnt=0;
int cnt2=0;
for(i=2; i<=3; i++)
{
if(d[i]==d[i-1])
{
cnt++;
}
if(c[i]==c[i-1])
{
cnt2++;
}
}
if(cnt2>cnt)
{
return 1;
}
else if(cnt2<cnt)
{
return 0;
}
else if(cnt==cnt2)
{
if(cnt==0)
{
int nx=d[1]+d[2]*10+d[3]*100;
int ny=c[1]+c[2]*10+100*c[3];
if(ny>nx)
{
return 1;
}
else return 0;
}
if(cnt==1)
{

for(i=1; i<=3; i++)
{
if(c[i]!=c[2])
{
break;
}
}
int nx=c[2]*100+c[2]*10+c[i];
for(i=1; i<=3; i++)
{
if(d[i]!=d[2])
{
break;
}
}
int ny=d[2]*100+d[2]*10+d[i];
if(nx>ny)
{
return 1;
}
else return 0;
}
else if(cnt==2)
{
if(c[1]>d[1])
{
return 1;
}
else return 0;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: