现代方法 第十章第四题

#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("");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值