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;
}

やるだけ解法。