玩骰子(概率,暴力)

暴力就行,不过要注意,如果一开始就赢了,那么就不用再置骰子了那么就为1了。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<algorithm>
  4 #include<iostream>
  5 #include<queue>
  6 #include<math.h>
  7 int kk();
  8 using namespace std;
  9 typedef long long ll;
 10 int a[7];
 11 int b[4];
 12 int c[4];
 13 int d[4];
 14 int main(void)
 15 {
 16     int n,i,j,k,p,q,s;
 17     scanf("%d",&k);
 18     while(k--)
 19     {
 20         for(i=1; i<=3; i++)
 21         {
 22             scanf("%d",&b[i]);
 23             c[i]=b[i];
 24         }
 25         for(i=1; i<=3; i++)
 26         {
 27             scanf("%d",&a[i]);
 28             d[i]=a[i];
 29         }
 30         int nn=kk();
 31         double sum;
 32         if(nn==1)
 33         {
 34             sum=1;
 35         }
 36         else
 37         {
 38             int uu=0;
 39             for(i=1; i<=3; i++)
 40             {
 41 
 42                 int rr=0;
 43                 for(s=1; s<=6; s++)
 44                 {
 45                     for(j=1; j<=3; j++)
 46                     {
 47                         c[j]=b[j];
 48                     }
 49                     c[i]=s;
 50                     rr+=kk();
 51                 }
 52                 if(rr>uu)
 53                 {
 54                     uu=rr;
 55                 }
 56 
 57             }
 58             sum=1.0*uu/6;
 59 
 60         }
 61         printf("%.3f\n",sum);
 62     }
 63     return 0;
 64 
 65 }
 66 
 67 int kk()
 68 {
 69     int i,j,k,p,q;
 70     sort(c+1,c+4);
 71     sort(d+1,d+4);
 72     int cnt=0;
 73     int cnt2=0;
 74     for(i=2; i<=3; i++)
 75     {
 76         if(d[i]==d[i-1])
 77         {
 78             cnt++;
 79         }
 80         if(c[i]==c[i-1])
 81         {
 82             cnt2++;
 83         }
 84     }
 85     if(cnt2>cnt)
 86     {
 87         return 1;
 88     }
 89     else if(cnt2<cnt)
 90     {
 91         return 0;
 92     }
 93     else if(cnt==cnt2)
 94     {
 95         if(cnt==0)
 96         {
 97             int nx=d[1]+d[2]*10+d[3]*100;
 98             int ny=c[1]+c[2]*10+100*c[3];
 99             if(ny>nx)
100             {
101                 return 1;
102             }
103             else return 0;
104         }
105         if(cnt==1)
106         {
107 
108             for(i=1; i<=3; i++)
109             {
110                 if(c[i]!=c[2])
111                 {
112                     break;
113                 }
114             }
115             int nx=c[2]*100+c[2]*10+c[i];
116             for(i=1; i<=3; i++)
117             {
118                 if(d[i]!=d[2])
119                 {
120                     break;
121                 }
122             }
123             int ny=d[2]*100+d[2]*10+d[i];
124             if(nx>ny)
125             {
126                 return 1;
127             }
128             else return 0;
129         }
130         else if(cnt==2)
131         {
132             if(c[1]>d[1])
133             {
134                 return 1;
135             }
136             else return 0;
137         }
138     }
139 }

 

posted @ 2015-12-01 08:42  sCjTyC  阅读(256)  评论(0编辑  收藏  举报