Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Spoj - POKER

By: abhinavarora on Nov 6th, 2011  |  syntax: C  |  size: 5.79 KB  |  views: 54  |  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.        int num;
  5.        char suit;
  6.        };
  7. int flush(struct card *);
  8. int check(int *);
  9. int main()
  10. {
  11.     int t,fstatus,i,j,done,pstatus;
  12.     int arr[14]={0};
  13.     char buff[2];
  14.     struct card c[5],temp;
  15.     scanf("%d",&t);
  16.     for(;t>0;t--)
  17.     {
  18.               for(i=0;i<14;i++)
  19.                               arr[i]=0;
  20.               for(i=0;i<5;i++)
  21.               {
  22.                               scanf("%s",buff);
  23.                               switch(buff[0])
  24.                               {
  25.                                              case 'T':
  26.                                                   c[i].num=10;
  27.                                                   arr[10]++;
  28.                                                   break;
  29.                                              case 'J':
  30.                                                   c[i].num=11;
  31.                                                   arr[11]++;
  32.                                                   break;
  33.                                              case 'Q':
  34.                                                   c[i].num=12;
  35.                                                   arr[12]++;
  36.                                                   break;
  37.                                              case 'K':
  38.                                                   c[i].num=13;
  39.                                                   arr[13]++;
  40.                                                   break;
  41.                                              case 'A':
  42.                                                   c[i].num=1;
  43.                                                   arr[1]++;
  44.                                                   break;
  45.                                              default:
  46.                                                   c[i].num=buff[0]-'0';
  47.                                                   arr[buff[0]-'0']++;  
  48.                                              }
  49.                               c[i].suit=buff[1];
  50.                               }
  51.               for(i=0,done=0;i<=3&&done==0;i++)
  52.               {
  53.                                      done=1;
  54.                                      for(j=0;j<4-i;j++)
  55.                                      {
  56.                                                        if(c[j].num>c[j+1].num)
  57.                                                        {
  58.                                                                               temp=c[j];
  59.                                                                               c[j]=c[j+1];
  60.                                                                               c[j+1]=temp;
  61.                                                                               done=0;
  62.                                                                               }
  63.                                                        }
  64.                                      }
  65.               fstatus=flush(c);
  66.               if(fstatus==3)
  67.               {
  68.                             printf("royal flush\n");
  69.                             continue;
  70.                             }
  71.               else if(fstatus==2)
  72.               {
  73.                                  printf("straight flush\n");
  74.                                  continue;
  75.                                  }
  76.               else if((c[0].num==c[1].num && c[0].num==c[2].num && c[0].num==c[3].num) || (c[1].num==c[2].num && c[1].num==c[3].num && c[1].num==c[4].num))
  77.                    {
  78.                                           printf("four of a kind\n");
  79.                                           continue;
  80.                                           }
  81.               else if((c[0].num==c[1].num && c[2].num==c[3].num && c[2].num==c[4].num) || (c[0].num==c[1].num && c[0].num==c[2].num && c[3].num==c[4].num))
  82.               {
  83.                                           printf("full house\n");
  84.                                           continue;
  85.                                           }
  86.               else if(fstatus==1)
  87.               {
  88.                    printf("flush\n");
  89.                    continue;
  90.                    }
  91.               else if((c[0].num+1==c[1].num || (c[0].num==1 && c[1].num==10)) && c[1].num+1==c[2].num && c[2].num+1==c[3].num && c[3].num+1==c[4].num )
  92.                    {
  93.                                            printf("straight\n");
  94.                                            continue;
  95.                                            }
  96.               pstatus=check(arr);
  97.               if(pstatus==3)
  98.               {
  99.                             printf("three of a kind\n");
  100.                             continue;
  101.                             }
  102.               else if(pstatus==2)
  103.               {
  104.                                  printf("two pairs\n");
  105.                                  continue;
  106.                                  }
  107.               else if(pstatus==1)
  108.               {
  109.                    printf("pair\n");
  110.                    continue;
  111.                    }
  112.               else
  113.                    printf("high card\n");
  114.               }
  115.     return 0;
  116.     }
  117. int flush(struct card *c)
  118. {
  119.     if(!((c[0].suit==c[1].suit)&&(c[0].suit==c[2].suit)&&(c[0].suit==c[3].suit)&&(c[0].suit==c[4].suit)))
  120.                                                                                                          return 0;
  121.     if(c[0].num==1 &&c [1].num==10 && c[2].num==11 &&c[3].num==12 && c[4].num==13)
  122.                    return 3;
  123.     if(c[4].num-c[0].num==4)
  124.                             return 2;
  125.     return 1;
  126.     }
  127. int check(int *arr)
  128. {
  129.     int array[5]={0},i;
  130.     for(i=1;i<14;i++)
  131.                      array[arr[i]]++;
  132.     if(array[3]==1)
  133.                    return 3;
  134.     else if(array[2]==2)
  135.          return 2;
  136.     else if(array[2]==1)
  137.          return 1;
  138.     else
  139.          return 0;
  140.     }
  141.  
  142.