Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Dec 14th, 2010  |  syntax: None  |  size: 3.97 KB  |  views: 102  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include<stdio.h>
  2. struct card
  3. {
  4.     char rank,suite;
  5. };
  6.  
  7. struct card c[5],temp;
  8. int ranks[14],suites[17];
  9. int main(void)
  10. {
  11.     char t,i,j,k,in_seq=0,same_suit=0,flag,in[3];
  12.     scanf("%d",&t);
  13.     //cout<<"\nt="<<t;
  14.     while(t--)
  15.     {
  16.         //cout<<"\nt in while ="<<t;
  17.         for(i=0;i<14;i++)
  18.         ranks[i]=0;
  19.         suites[0]=suites[1]=suites[5]=suites[16]=0;
  20.         flag=in_seq=same_suit=0;
  21.         //cout<<"\n1. t="<<t;
  22.         fflush(stdin);
  23.         for(i=0;i<5;i++)
  24.         {
  25.             //cout<<"\n0. t="<<t;
  26.             scanf("%s",&in);
  27.             //cout<<"\n"<<in;
  28.             if(in[0]>='2' && in[0]<='9')
  29.             c[i].rank=in[0]-'0';
  30.             else if(in[0]=='A')
  31.             c[i].rank=1;
  32.             else if(in[0]=='T')
  33.             c[i].rank=10;
  34.             else if(in[0]=='J')
  35.             c[i].rank=11;
  36.             else if(in[0]=='Q')
  37.             c[i].rank=12;
  38.             else if(in[0]=='K')
  39.             c[i].rank=13;
  40.             ranks[c[i].rank-1]++;
  41.             c[i].suite=in[1];
  42.             suites[c[i].suite-'C']++;
  43.             //cout<<"\n3. t="<<t;
  44.             //sort according to rank
  45.             for(j=0;j<i;j++)
  46.             if(c[j].rank>c[i].rank)
  47.             break;
  48.             if(j<i)
  49.             {
  50.                 temp=c[i];
  51.                 for(k=i;k>j;k--)
  52.                 c[k]=c[k-1];
  53.                 c[j]=temp;
  54.             }
  55.         }
  56.         //cout<<"\n2. t="<<t;
  57.         //cout<<"\nafter sort: \n";
  58.         //for(i=0;i<5;i++)
  59.         //cout<<(int)c[i].rank<<c[i].suite<<" ";
  60.         //cards in sorted rank
  61.         //check for same suit
  62.         if(suites[0]==5||suites[1]==5||suites[5]==5||suites[16]==5)
  63.         same_suit=1;
  64.         //check for sequence
  65.         for(i=1;i<5;i++)
  66.         if(c[i].rank!=c[i-1].rank+1)
  67.         break;
  68.         if(i==5)
  69.         in_seq=1;
  70.         //cout<<"\nin_seq="<<(int)in_seq<<" same_suit="<<(int)same_suit<<"\n";
  71.         //royal flush
  72.         if( (c[0].rank==1&&c[1].rank==10&&c[2].rank==11&&c[3].rank==12&&c[4].rank==13))
  73.         {
  74.             if(same_suit)
  75.             printf("royal flush\n");
  76.             else printf("straight\n");
  77.             flag=1;
  78.         }
  79.         else if(in_seq&&same_suit)
  80.         {
  81.             printf("straight flush\n");
  82.             flag=1;
  83.         }
  84.         else
  85.         {
  86.             for(i=0;i<5;i++)
  87.             if(ranks[c[i].rank-1]==4)
  88.             break;
  89.             if(i<5)
  90.             {
  91.                 printf("four of a kind\n");
  92.                 flag=1;
  93.             }
  94.         }
  95.         if(!flag)
  96.         {
  97.             for(i=0;i<5;i++)
  98.             if(ranks[c[i].rank-1]==3)
  99.             break;
  100.             if(i<5)
  101.             {
  102.                 for(i=0;i<5;i++)
  103.                 if(ranks[c[i].rank-1]==2)
  104.                 break;
  105.                 if(i<5)
  106.                 {
  107.                     printf("full house\n");
  108.                     flag=1;
  109.                 }
  110.             }
  111.         }
  112.         if(!flag&&same_suit)
  113.         {
  114.             printf("flush\n");
  115.             flag=1;
  116.         }
  117.         else if(!flag&&in_seq)
  118.         {
  119.             printf("straight\n");
  120.             flag=1;
  121.         }
  122.         else if(!flag)
  123.         {
  124.             for(i=0;i<5;i++)
  125.             if(ranks[c[i].rank-1]==3)
  126.             break;
  127.             if(i<5)
  128.             {
  129.                 printf("three of a kind\n");
  130.                 flag=1;
  131.             }
  132.         }
  133.         if(!flag)
  134.         {
  135.             for(i=0;i<14;i++)
  136.             if(ranks[i]==2)
  137.             break;
  138.             if(i<14)
  139.             {
  140.                 for(j=0;j<14;j++)
  141.                 if(j!=i&&ranks[j]==2)
  142.                 break;
  143.                 if(j<14)
  144.                 {
  145.                     printf("two pairs\n");
  146.                     flag=1;
  147.                 }
  148.             }
  149.         }
  150.         if(!flag)
  151.         {
  152.             for(i=0;i<5;i++)
  153.             if(ranks[c[i].rank-1]==2)
  154.             break;
  155.             if(i<5)
  156.             {
  157.                 printf("pair\n");
  158.                 flag=1;
  159.             }
  160.         }
  161.         if(!flag)
  162.         printf("high card\n");
  163.         //cout<<"\nt="<<t;
  164.     }
  165.     return 0;
  166. }
clone this paste RAW Paste Data