poj 3966 Hands of Poker

poj 3966 Hands of Poker,第1张

poj 3966 Hands of Poker
#include<iostream>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<stdio.h>using namespace std;int len,cnt,num[17],ans,cont,num1[17];struct pai{    int rank;    char suit;    bool operator <(const pai &temp)const    {        return rank<temp.rank;    }};struct pp{    pai a[10];};pp nw,now;char str[100];int level(pp nw,int num[]){    int i,j,s,p,q,res;    if(num[nw.a[4].rank]==4)       return 7;    if(num[nw.a[4].rank]==3&&num[nw.a[1].rank]==2)      return 6;    for(i=1;i<5;i++)    {        if(nw.a[i].suit!=nw.a[i-1].suit)break;    }    if(i>=5)    {       for(i=1;i<5;i++)       {if(nw.a[i].rank!=nw.a[i-1].rank+1)   break;       }       if(i>=5)          return 8;       return 5;    }    for(i=1;i<5;i++)    {        if(nw.a[i].rank!=nw.a[i-1].rank+1)   break;    }    if(i>=5)       return 4;    if(num[nw.a[4].rank]==3)       return 3;    if(num[nw.a[4].rank]==2&&num[nw.a[2].rank]==2)       return 2;    if(num[nw.a[4].rank]==2)       return 1;    return 0;}int compare(pp nw1,pp nw2){    int i,v1=level(nw1,num1),v2=level(nw2,num);    if(v1<v2)       return -1;    if(v1>v2)       return 1;    for(i=4;i>=0;i--)    {       if(nw1.a[i].rank<nw2.a[i].rank)          return -1;       else if(nw1.a[i].rank>nw2.a[i].rank)          return 1;    }    return 0;}void xu(pp &nw,int num[]){     int i,j;     if(nw.a[0].rank==2&&nw.a[1].rank==3&&nw.a[2].rank==4&&nw.a[3].rank==5&&nw.a[4].rank==14)     {         swap(nw.a[0],nw.a[4]);         swap(nw.a[3],nw.a[4]);         swap(nw.a[2],nw.a[3]);         swap(nw.a[1],nw.a[2]);         nw.a[0].rank=1;     }     for(i=0;i<5;i++)     {         num[nw.a[i].rank]=0;         for(j=0;j<5;j++)         {    if(nw.a[i].rank==nw.a[j].rank)       num[nw.a[i].rank]++;         }     }     for(i=0;i<5;i++)        for(j=i+1;j<5;j++)        { if((num[nw.a[i].rank]>num[nw.a[j].rank])||(num[nw.a[i].rank]==num[nw.a[j].rank]&&nw.a[i].rank>nw.a[j].rank))    swap(nw.a[i],nw.a[j]);        }}int main(){    int i,j,lv1,lv2,lv3;    int a[5];    while(gets(str))    {        len=strlen(str);        cnt=0;        for(i=0;i<len;i++)        { if(str[i]<='9'&&str[i]>='0')     nw.a[cnt].rank=str[i]-'0'; else if(str[i]=='C'||str[i]=='D'||str[i]=='H'||str[i]=='S')     nw.a[cnt++].suit=str[i]; else if(str[i]=='A')     nw.a[cnt].rank=14; else if(str[i]=='K')     nw.a[cnt].rank=13; else if(str[i]=='Q')     nw.a[cnt].rank=12; else if(str[i]=='J')     nw.a[cnt].rank=11; else if(str[i]=='T')      nw.a[cnt].rank=10;        }        sort(nw.a,nw.a+5);        xu(nw,num);         ans=0;        cont=0;        for(a[0]=2;a[0]<=14;a[0]++)          for(a[1]=a[0];a[1]<=14;a[1]++)  for(a[2]=a[1];a[2]<=14;a[2]++)     for(a[3]=a[2];a[3]<=14;a[3]++)       for(a[4]=a[3];a[4]<=14;a[4]++)       {for(i=0;i<5;i++){   now.a[i].rank=a[i];   now.a[i].suit='C';}xu(now,num1);if(num1[now.a[4].rank]==5)   continue;if(num1[now.a[4].rank]==1){   lv2=level(now,num1);   if(compare(now,nw)<0)      ans++;}else   lv2=-1; now.a[4].suit='S';lv3=level(now,num1);if(lv2!=lv3){   if(compare(now,nw)<0)      ans++;}       }        ans++;        printf("%dn",ans);    }    return 0;   }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4902436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存