求助
查看原帖
求助
875806
liupan2010楼主2023/5/20 11:52

民间数据过了:

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;
}
2023/5/20 11:52
加载中...