当前位置: 首页 > 工具软件 > poker-maison > 使用案例 >

POJ 2694. A Simple Poker Game

皇甫波峻
2023-12-01

题意

        额,就是给你 5 张牌,让你判定这手牌的分数,纯模拟,具体的规则如下:
   1、Straight flush: 1000 points five cards of the same suit in sequence, such as 76543 of hearts. Note that AKQJX is treated as a valid sequence. 
   2、Four of a kind: 750 points four cards of the same rank accompanied by a "kicker", like 44442.  
   3、Full house: 500 points three cards of one rank accompanied by two of another, such as 777JJ. 
   4、Flush: 350 points five cards of the same suit, such as AJ942 of hearts. 
   5、Straight: 250 points five cards in sequence, such as 76543. Note that AKQJX is treated as a valid sequence. 
   6、Three of a kind: 200 points three cards of the same rank and two kickers of different ranks, such as KKK84. 
   7、Two pairs: 100 points two cards of one rank, two cards of another rank and a kicker of a third rank, such as KK449. 
   8、One pair: 50 points two cards of one rank accompanied by three kickers of different ranks, such as AAK53. 
   9、None of the above: O point any hand that does not qualify as one of the better hands above, such as KJ542 of mixed suits.
        不知道当时拼着怎样的毅力做完的。。。反正分数是一次增大的,从上到下判断就行,好恶心

AC通道

POJ 2694. A Simple Poker Game

代码


#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <stack>

#define INT_INF 0x3fffffff
#define LL_INF 0x3fffffffffffffff
#define EPS 1e-12
#define MOD 1000000007
#define PI 3.141592653579798
#define N 300

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef double DB;

struct data
{
    char s[2];
} card[6];

bool cmp(data a,data b)
{
    if(a.s[1]==b.s[1]) return a.s[0]<b.s[0];
    else return a.s[1]<b.s[1];
}

int cal()
{
    int fg1=1 , fg2=1;
    for(int i=1;i<=4;i++)
        if(card[i].s[0]!=card[i+1].s[0])
        {
            fg1=0;
            break;
        }
    for(int i=1;i<=4;i++)
        if(card[i].s[1]!=card[i+1].s[1]-1)
        {
            fg2=0;
            break;
        }
    if(card[1].s[1]==1 && card[2].s[1]==10 && card[3].s[1]==11 && card[4].s[1]==12 && card[5].s[1]==13) fg2=1;

    if(fg1 && fg2) return 1000;

    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 750;
    if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 750;

    if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 500;
    if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 500;

    if(fg1) return 350;

    if(fg2) return 250;

    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]==card[5].s[1]) return 200;
    if(card[1].s[1]==card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 200;

    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 100;
    if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 100;
    if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 100;

    if(card[1].s[1]==card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]==card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]==card[4].s[1] && card[4].s[1]!=card[5].s[1]) return 50;
    if(card[1].s[1]!=card[2].s[1] && card[2].s[1]!=card[3].s[1] && card[3].s[1]!=card[4].s[1] && card[4].s[1]==card[5].s[1]) return 50;

    return 0;
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int ca=1;ca<=n;ca++)
    {
        for(int i=1;i<=5;i++)
        {
            scanf("%s",&card[i].s);
            if(card[i].s[1]>='0' && card[i].s[1]<='9') card[i].s[1]=card[i].s[1]-'0';

            if(card[i].s[1]=='A') card[i].s[1]=1;
            if(card[i].s[1]=='X') card[i].s[1]=10;
            if(card[i].s[1]=='J') card[i].s[1]=11;
            if(card[i].s[1]=='Q') card[i].s[1]=12;
            if(card[i].s[1]=='K') card[i].s[1]=13;

        }
        sort(card+1,card+1+5,cmp);
        printf("%d\n",cal());
    }
    return 0;
}


 类似资料:

相关阅读

相关文章

相关问答