Tamflexの貯蔵庫

やる気のない備忘録

aoj 0038

ポーカー | Aizu Online Judge

ポーカーの問題. 似たようなものに麻雀の得点計算プログラムがあり,既出だと思うけど, いつか作ってみたい.

void solve(int a1, int a2, int a3, int a4, int a5)
{
  int a[13]; fill_n(a,13,0);
  a[--a1]++;a[--a2]++;a[--a3]++;a[--a4]++;a[--a5]++;
  int m = 0; bool f = false;
  vector<int> s;
  string ans;
  REP(i,13)
  {
    m = max(a[i],m);
    if(a[i]>0)
    {
      s.push_back(a[i]);
      if(i < 10)
      {
        bool flag = true;
        REP(j,5) if(a[(i+j)%13] == 0)
        {
          flag = false;
          break;
        }
        f = f || flag;
      }
    }
  }
  if(m >= 4) ans = "four card";
  else if(s.size()==2) ans = "full house";
  else if(f) ans = "straight";
  else
  {
    int b[3]; fill_n(b,3,0);
    REP(i,s.size()) b[s[i]-1]++;
    if(b[2] > 0) ans = "three card";
    else if(b[1] > 1) ans = "two pair";
    else if(b[1] > 0) ans = "one pair";
    else ans = "null";
  }
  printf("%s\n",ans.c_str());
}

int main()
{
  cin.tie(0);
  ios::sync_with_stdio(false);
  int a,b,c,d,e;
  while(~scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e))
    solve(a,b,c,d,e);
  return 0;
}