• 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
    ",sw);
     }
     return 0;	
    }
    
  • 相关阅读:
    OO第四次总结
    OO第三次总结
    C语言函数指针
    Java对象集合
    emacs下最牛逼的Markdown编辑方式
    OO第二次总结
    Git复习
    Java设计原则
    多线程学习笔记1
    OO第一次总结
  • 原文地址:https://www.cnblogs.com/lihan123/p/11699151.html
Copyright © 2020-2023  润新知