#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define CARDS 5
int card[CARDS][2];
void read_card();
void agazly_card();
void print_result();
void print_cards();
bool straight, flush, four, three, big, small;
int pair, card_count;
int main()
{
for (;;)
{
read_card();
agazly_card();
print_result();
// print_cards();
}
system("pause");
return 0;
}
void read_card()
{
card_count = 0;
int i;
int rank, suit;
char card_rank, card_suit, ch;
while (card_count<CARDS)
{
bool badcard = false;
bool repeatcard = false;
printf("Enter a card:");
card_rank = getchar();
switch (card_rank)
{
case '0': exit(EXIT_SUCCESS);
case '2': rank = 2; break;
case '3': rank = 3; break;
case '4': rank = 4; break;
case '5': rank = 5; break;
case '6': rank = 6; break;
case '7': rank = 7; break;
case '8': rank = 8; break;
case '9': rank = 9; break;
case 't':case 'T': rank = 10; break;
case 'j':case 'J': rank = 11; break;
case 'q':case 'Q': rank = 12; break;
case 'k':case 'K': rank = 13; break;
case 'a':case 'A': rank = 14; break;
default: badcard = true; break;
}
card_suit = getchar();
switch (card_suit)
{
case 'c':case 'C': suit = 0; break;
case 'd':case 'D': suit = 1; break;
case 'h':case 'H': suit = 2; break;
case 's':case 'S': suit = 3; break;
default: badcard = true; break;
}
while ((ch = getchar()) != '\n')
{
if (ch != ' ')badcard = true;
}
if (badcard)
{
printf("Bad card:ignored.\n");
continue;
}
for (i = 0; i<card_count; i++)
{
if ((card[i][0] == rank) && (card[i][1] == suit))
{
repeatcard = true;
}
}
if (repeatcard)
{
printf("Duplicate card:igonred.\n");
continue;
}
card[card_count][0] = rank;
card[card_count][1] = suit;
card_count++;
}
}
void agazly_card()
{
int i, j, tmp_rank, tmp_suit;
pair = 0;
straight = true;
flush = true;
four = false;
three = false;
big = true;
small = true;
for (i = 0; i<CARDS; i++)
{
for (j = i; j<CARDS; j++)
{
if (card[i][0]>card[j][0])
{
tmp_rank = card[i][0];
card[i][0] = card[j][0];
card[j][0] = tmp_rank;
tmp_suit = card[i][1];
card[i][1] = card[j][1];
card[j][1] = tmp_suit;
}
}
}
for (i = 0; i<CARDS - 1; i++)
{
if (card[i][1] != card[i + 1][1])
straight = false;
if ((card[i][0] + 1) != (card[i + 1][0]))
flush = false;
}
for (i = 0; i<CARDS; i++)//同花大顺及小顺;
{
if (card[i][0] != (i + 10))
big = false;
if ((card[i][0] != (i + 2)) && card[i][0] != 14)
small = false;
}
card_count = 0;
while (card_count<CARDS)
{
int run = 0;
int rank = card[card_count][0];
do
{
run++;
card_count++;
} while (card_count<CARDS && rank == card[card_count][0]);
switch (run)
{
case 4:four = true; break;
case 3:three = true; break;
case 2:pair++; break;
}
}
}
void print_result()
{
if (straight&&flush&&big)printf("Big Straight Flush.\n");//同花大顺;
else if (straight&&flush)printf("straight Flush.\n");
else if (four)printf("Four of kind.\n");
else if (three && pair == 1)printf("Full house.\n");
else if (straight)printf("Straight.\n");
else if (flush)printf("Flush.\n");
else if (small)printf("Small Flush.\n");//小顺;
else if (three)printf("Three of kind.\n");
else if (pair == 2)printf("Two pairs.\n");
else if (pair == 1)printf("Pairs.\n");
else printf("High Card.\n");
}
void print_cards()//检验输入是否成功;
{
int i, j;
for (i = 0; i<CARDS; i++)
{
for (j = 0; j<2; j++)
{
printf("%2d ", card[i][j]);
}
puts("");
}
}
现代方法 第十章第四题
最新推荐文章于 2022-03-01 16:31:20 发布