Alice的德州扑克 - 题目 - Daimayuan Online Judge
从最大的牌开始判断,如果满足直接输出,return 0,否则就接着判断,一层一层往下判断
AC代码:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 20;
int a[N];
int color[N];
int cnt[N];
bool flaga;
bool flagcolor;
int main()
{
flaga = true;
flagcolor = true;
for (int i = 1; i <= 5; i++) cin >> a[i];
for (int i = 1; i <= 5; i++) cin >> color[i];
for (int i = 2; i <= 5; i++) {
if (a[i] != a[i - 1]+1) flaga = false;
}
sort(color+1, color+1 + 5);
for (int i = 2; i <= 5; i++) {
if (color[i] != color[i - 1]) flagcolor = false;
}
//flaga为true表示点数连续单调递增
//flagcolor为true表示五张牌的花色相同
if (flaga && flagcolor) {
if (a[5] == 14) {
cout << "ROYAL FLUSH" << endl;
return 0;
}
else {
cout << "STRAIGHT FLUSH" << endl;
return 0;
}
}
//用双指针求最大连续相同点数的个数
int len=0;
int j = 1;
for (int i = 1; i <=5; i++) {
while (j <= 5 && a[i] == a[j]) j++;
len = max(len, j - i);
}
if (len >= 4) {
cout << "FOUR OF A KIND" << endl;
return 0;
}
//若len为3并且除此之外还有两张牌的点数相同,那么只有两种情况
if (len == 3) {
if (a[1] == a[2] && a[3] == a[4]&&a[4]==a[5] || a[1] == a[2]&&a[2]==a[3] && a[4] == a[5]) {
cout << "FULL HOUSE" << endl;
return 0;
}
}
if (flagcolor) {
cout << "FLUSH" << endl;
return 0;
}
if (flaga) {
cout << "STRAIGHT" << endl;
return 0;
}
cout << "FOLD" << endl;
return 0;
}