Poker Hand

AOJ 0038: Poker Hand
簡易ポーカーの役判定
特に工夫するところもなく素直に実装。

#include<stdio.h>
#include<vector>
 
bool isStraight(int cs[14]){
   for(int i=1;i<=9;i++){
       if(cs[i]&&cs[i+1]&&cs[i+2]&&cs[i+3]&&cs[i+4])return true;
   }
   if(cs[1]&&cs[10]&&cs[11]&&cs[12]&&cs[13])return true;
   return false; 
}
 
int main(){
   int a;
   while(scanf("%d",&a)!=EOF){
       int cs[14]={0};
       std::vector<int> vec;
       cs[a]++;
       for(int i=0;i<4;i++){
           scanf(",%d",&a);
           cs[a]++;
       }
       for(int i=1;i<=13;i++){
           if(cs[i]>1)vec.push_back(cs[i]);
       }
       while(vec.size()<2)vec.push_back(0);
       if(vec[0]<vec[1]){
           int t=vec[0];
           vec[0]=vec[1];
           vec[1]=t;
       }
       if(vec[0]==4)printf("four card");
       else if(vec[0]==3&&vec[1]==2)printf("full house");
       else if(isStraight(cs))printf("straight");
       else if(vec[0]==3)printf("three card");
       else if(vec[0]==2&&vec[1]==2)printf("two pair");
       else if(vec[0]==2)printf("one pair");
       else printf("null");
       printf("\n");
   }   
}
最終更新:2015年08月20日 03:31