0038 - Poker Hand
#include <algorithm> #include <cstdio> #include <iostream> #include <string> using namespace std; void Slove(int hand[]) { int number_count[13]={0}, answer=0, rank=0; const string pattern[7]={"null", "one pair", "two pair", "three card", "straight", "full house", "four card"}; for (int i=0; i<5; ++i) ++number_count[hand[i]-1]; for (int i=0; i<13; ++i) { if (number_count[i] == 1) { if (i == 9) { if (number_count[10]==1 && number_count[11] && number_count[12] && number_count[0]) rank=4; answer=max(answer,rank); } else if (i < 9) { int j; for (j=i+1; j<13; ++j) if (number_count[j] != 1) break; if (j == i+5) rank=4; answer=max(answer,rank); } } if (number_count[i] == 2) { rank=1; for (int j=i+1; j<13; ++j) { if (number_count[j] == 2) rank=2; if (number_count[j] == 3) rank=5; answer=max(answer,rank); } } if (number_count[i] == 3) { rank=3; for (int j=i+1; j<13; ++j) { if (number_count[j] == 2) rank=5; answer=max(answer,rank); } } if (number_count[i] == 4) answer=6; } cout << pattern[answer] << endl; } int main(void) { int hand[5]; while (scanf ("%d,%d,%d,%d,%d", &hand[0], &hand[1], &hand[2], &hand[3], &hand[4]) != EOF) Slove(hand); return 0; }
やるだけ解法。