民间数据过了:
input:
11
AH KH QH TH JH
AD 2D 3D 4D 5D
2S 2H 2D 2C 4D
QH QD 2S QC 2C
4C 3C 2C AC KC
4C 9C TC AC KC
5H AS 2C 3D 4C
5H 5D 5C 7H KS
2H 2S 4C 4S 5D
KH 5S 3C 5C 7D
AH 4S 9C TD 3H
output:
royal flush
straight flush
four of a kind
full house
flush
flush
straight
three of a kind
two pairs
pair
high card
My code:
#include<bits/stdc++.h>
using namespace std;
int t;
int cnt_a,cnt_k,cnt_q,cnt_j,cnt_t;
struct node{
char first,last;
}card[5];
bool cmp(node a,node b){
return a.first<b.first;
}
bool tonghuase(){
for(int i=0;i<4;i++){
if(card[i].last!=card[i+1].last){
return false;
}
}
return true;
}
bool butonghuase(){
for(int i=0;i<4;i++){
if(card[i].last==card[i+1].last){
return false;
}
}
return true;
}
bool shunzi(){
bool flag=true;
node temp[5];
for(int i=0;i<5;i++){
temp[i].first=card[i].first;
}
for(int i=0;i<5;i++){
if(temp[i].first==14){
temp[i].first=1;
}
}
sort(temp,temp+5,cmp);
for(int i=0;i<4;i++){
if(temp[i].first!=temp[i+1].first-1){
flag=false;
break;
}
}
if(flag){
return true;
}
for(int i=0;i<5;i++){
if(temp[i].first==1){
temp[i].first=14;
}
}
for(int i=0;i<4;i++){
if(temp[i].first!=temp[i+1].first-1){
return false;
}
}
return true;
}
int cnt(int num){
int ans=0;
int t[15]={0};
for(int i=0;i<5;i++){
if(card[i].first==14){
t[1]++;
}
t[card[i].first]++;
}
for(int i=1;i<=14;i++){
if(t[i]==num){
ans++;
}
}
return ans;
}
bool two_pairs(){
int t[15]={0},ans=0;
for(int i=0;i<5;i++){
if(card[i].first==14){
t[1]++;
}
t[card[i].first]++;
}
for(int i=1;i<=14;i++){
if(t[i]==2){
ans++;
}
}
if(ans==3&&t[1]==2&&t[14]==2){
return true;
}
else{
return ans==2;
}
}
bool _pair(){
int t[15]={0},ans=0;
for(int i=0;i<5;i++){
if(card[i].first==14){
t[1]++;
}
t[card[i].first]++;
}
for(int i=1;i<=14;i++){
if(t[i]==2){
ans++;
}
}
if(ans==2&&t[1]==2&&t[14]==2){
return true;
}
else{
return ans==1;
}
}
void check(){
if(tonghuase()&&cnt_a==1&&cnt_k==1&&cnt_q==1&&cnt_j==1&&cnt_t==1){
puts("royal flush");
}
else if(tonghuase()&&shunzi()){
puts("straight flush");
}
else if(cnt(4)==1){
puts("four of a kind");
}
else if(cnt(3)==1&&cnt(2)==1){
puts("full house");
}
else if(tonghuase()&&!shunzi()){
puts("flush");
}
else if(butonghuase()&&shunzi()){
puts("straight");
}
else if(cnt(3)&&cnt(1)){
puts("three of a kind");
}
else if(two_pairs()){
puts("two pairs");
}
else if(_pair()){
puts("pair");
}
else{
puts("high card");
}
}
int main(){
cin>>t;
while(t--){
cnt_t=0,cnt_j=0,cnt_q=0,cnt_k=0,cnt_a=0;
for(int i=0;i<5;i++){
cin>>card[i].first>>card[i].last;
if(card[i].first>='0'&&card[i].first<='9'){
card[i].first-='0';
}
else if(card[i].first=='T'){
card[i].first=10;
}
else if(card[i].first=='J'){
card[i].first=11;
}
else if(card[i].first=='Q'){
card[i].first=12;
}
else if(card[i].first=='K'){
card[i].first=13;
}
else if(card[i].first=='A'){
card[i].first=14;
}
if(card[i].first==14){
cnt_a++;
}
else if(card[i].first==13){
cnt_k++;
}
else if(card[i].first==12){
cnt_q++;
}
else if(card[i].first==11){
cnt_j++;
}
else if(card[i].first==10){
cnt_t++;
}
}
sort(card,card+5,cmp);
check();
}
return 0;
}