码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 131 The Psychic Poker Player

时间:2015-04-16 07:57:41      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

此题写起来有点烦躁,但思路并不难。枚举一下丢1,2,3,4,5张的所有情况,就可以出答案了。DFS。

#include<stdio.h>
char s1[6][3], s2[6][3];//输入
int hand[6], deck[6];//输入点数的转换成数字
int flag[6];//标记这张牌用不用 1表示用
int ff[6];//保存当前枚举到的牌的点数
char pp[6];//保存当前枚举到的牌的点数
int max = 0;//求出最大值
int k = 0;//当前枚举到的情况
void straightflush()
{
    if (pp[1] == pp[2] && pp[1] == pp[3] && pp[1] == pp[4] && pp[1] == pp[5])
    {
        if ((ff[1] + 1 == ff[2] && ff[2] + 1 == ff[3] && ff[3] + 1 == ff[4] && ff[4] + 1 == ff[5]
            ) || (ff[1] == 1 && ff[2] == 10 && ff[3] == 11 && ff[4] == 12 && ff[5] == 13))
            k = 8;
    }
    return;
}
void fourofakind()
{
    if ((ff[1] == ff[2] && ff[1] == ff[3] && ff[1] == ff[4])
        || (ff[2] == ff[3] && ff[2] == ff[4] && ff[2] == ff[5]))
        k = 7;
    return;
}
void fullhouse()
{
    if ((ff[1] == ff[2] && ff[1] == ff[3] && ff[4] == ff[5])
        || (ff[1] == ff[2] && ff[3] == ff[4] && ff[3] == ff[5]))
        k = 6;
    return;
}
void flush()
{
    if (pp[1] == pp[2] && pp[1] == pp[3] && pp[1] == pp[4] && pp[1] == pp[5])
        k = 5;
    return;
}
void straight()
{
    if ((ff[1] + 1 == ff[2] && ff[2] + 1 == ff[3] && ff[3] + 1 == ff[4] && ff[4] + 1 == ff[5]
        ) || (ff[1] == 1 && ff[2] == 10 && ff[3] == 11 && ff[4] == 12 && ff[5] == 13))
        k = 4;
    return;
}
void threeofakind()
{
    if ((ff[1] == ff[2] && ff[1] == ff[3]) || (ff[2] == ff[3] && ff[2] == ff[4]) || (ff[3] == ff[4] && ff[3] == ff[5]))
        k = 3;
    return;
}
void twopairs()
{
    if ((ff[1] == ff[2] && ff[4] == ff[5]) || (ff[2] == ff[3] && ff[4] == ff[5]) || (ff[1] == ff[2] && ff[3] == ff[4]))
        k = 2;
    return;
}
void onepair()
{
    if (ff[1] == ff[2] || ff[2] == ff[3] || ff[3] == ff[4] || ff[4] == ff[5])
    k = 1;
    return;
}
void panduan(int ans)
{
    int i, j, r = 1, t, s = 8;
    char g;
    if (ans == 6)
    {
        //下面构造出ff和pp数组
        for (i = 1; i <= 5; i++)
        {if (flag[i] == 1){ ff[r] = hand[i]; pp[r] = s1[i][1]; r++; }}
        i = 1;
        while (r < 6){ ff[r] = deck[i]; pp[r] = s2[i][1]; r++; i++; }
        for (j = 1; j < 6; j++)
        {
            for (i = 1; i<6  - j; i++)
            {
                if (ff[i]>ff[i + 1])
                {
                    t = ff[i];
                    ff[i] = ff[i + 1];
                    ff[i + 1] = t;
                    g = pp[i];
                    pp[i] = pp[i + 1];
                    pp[i + 1] = g;
                }
            }
        }
        if (k == 0)straightflush();
        if (k == 0)fourofakind();
        if (k == 0)fullhouse();
        if (k == 0)flush();
        if (k == 0)straight();
        if (k == 0)threeofakind();
        if (k == 0)twopairs();
        if (k == 0)onepair();
        /*这里写8个判断函数*/

        if (k >= max) max = k;
        for (i = 1; i <= 5; i++) { ff[i] = 0; pp[i] = \0; }
        k = 0; return;
    }
    flag[ans] = 1;
    panduan(ans + 1);
    flag[ans] = 0;
    panduan(ans + 1);
}
int main()
{
    int i;
    while (~scanf("%s", s1[1]))
    {
        max = 0; k = 0;
        for (i = 2; i <= 5; i++) scanf("%s", s1[i]);
        for (i = 1; i <= 5; i++) scanf("%s", s2[i]);
        for (i = 1; i <= 5; i++) flag[i] = 0; max = 0;
        for (i = 1; i <= 5; i++)
        {
            if (s1[i][0] == A) hand[i] = 1;
            else if (s1[i][0] >= 2 && s1[i][0] <= 9) hand[i] = s1[i][0] - 0;
            else if (s1[i][0] == T) hand[i] = 10;
            else if (s1[i][0] == J) hand[i] = 11;
            else if (s1[i][0] == Q) hand[i] = 12;
            else if (s1[i][0] == K) hand[i] = 13;
        }
        for (i = 1; i <= 5; i++)
        {
            if (s2[i][0] == A) deck[i] = 1;
            else if (s2[i][0] >= 2 && s2[i][0] <= 9) deck[i] = s2[i][0] - 0;
            else if (s2[i][0] == T) deck[i] = 10;
            else if (s2[i][0] == J) deck[i] = 11;
            else if (s2[i][0] == Q) deck[i] = 12;
            else if (s2[i][0] == K) deck[i] = 13;
        }
        panduan(1);
        printf("Hand: ");
        printf("%s %s %s %s %s ", s1[1], s1[2], s1[3], s1[4], s1[5]);
        printf("Deck: ");
        printf("%s %s %s %s %s ", s2[1], s2[2], s2[3], s2[4], s2[5]);
        printf("Best hand: ");
        if (max == 0)printf("highest-card\n");
        if (max == 1)printf("one-pair\n");
        if (max == 2)printf("two-pairs\n");
        if (max == 3)printf("three-of-a-kind\n");
        if (max == 4)printf("straight\n");
        if (max == 5)printf("flush\n");
        if (max == 6)printf("full-house\n");
        if (max == 7)printf("four-of-a-kind\n");
        if (max == 8)printf("straight-flush\n");
    }
    return 0;
}

 

UVA 131 The Psychic Poker Player

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/4430911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!