T10396 曹老板斗地主(中度模拟)

这个题好像没什么难度,就是需要耐心调解。

注意事项:1.在加值时,>11要+10,在减值时,>11要-10。

2.判断类型要从分值从大到小判,要先判特殊牌,再判有头牌。

3.在判断是否有头时,也要判断J,K,Q。

4.注意本题是四舍五入。

#include<queue>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int t;
int a[6];
int num[15];
int ans,sum;
bool check()
{
  for(int i=1;i<=5;i++)
  {
    for(int j=i+1;j<=5;j++)
    {
      for(int k=j+1;k<=5;k++)
      {
       int b=a[i]>10 ? 10 : a[i];
       int c=a[j]>10 ? 10 : a[j];
       int d=a[k]>10 ? 10 : a[k];
       if((b+c+d)%10==0)
       return 1;    
      }
    }
  }
  return 0;
}

int main()
{
 scanf("%d",&t);
 while(t--)
 {
   memset(num,0,sizeof(num));
   ans=0,sum=0;
   for(int i=1;i<=4;i++)
   {
    scanf("%d",&a[i]);
    num[a[i]]++;
    if(a[i]>10) sum+=10;
    else sum+=a[i];
   }
   for(int i=1;i<=13;i++)
   {
     a[5]=i;
     num[i]++;
     if(a[5]>10) sum+=10;
     else sum+=a[5];
     if(sum<=10&&a[1]<5&&a[2]<5&&a[3]<5&&a[4]<5&&a[5]<5)
     {
        ans+=60;
        if(a[5]>10) sum-=10;
        else sum-=a[5];
        num[i]--;
        continue;
     }
     if(num[11]+num[12]+num[13]==5)
     {
        ans+=50;
        if(a[5]>10) sum-=10;
        else sum-=a[5];
        num[i]--;
        continue;   
     }
     if(num[a[1]]>=4||num[a[2]]>=4||num[a[3]]>=4||num[a[4]]>=4||num[a[5]]>=4)
     {
        ans+=40;
        if(a[5]>10) sum-=10;
        else sum-=a[5];
        num[i]--;
        continue;   
     }
     if(check())
     {
        if(sum%10==0)
        {
           ans+=30;
           if(a[5]>10) sum-=10;
           else sum-=a[5];
           num[i]--;
           continue;    
        }
        else if(sum%10<7)
        {
           ans+=sum%10;
           if(a[5]>10) sum-=10;
           else sum-=a[5];
           num[i]--;
           continue;
        } 
        else
        {
           ans+=(sum%10)*2;
           if(a[5]>10) sum-=10;
           else sum-=a[5];
           num[i]--;
           continue;    
        }
     }
      if(a[5]>10) sum-=10;
      else sum-=a[5];
      num[i]--;
   }
   double qw=(double)ans/13.0;
   int sw=(int)(qw+0.5);//四舍五入技巧
   printf("%d\n",sw);
 }
 return 0;  
}

猜你喜欢

转载自www.cnblogs.com/lihan123/p/11699151.html