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