c语言

来源:互联网 发布:乔任梁死因分析知乎 编辑:程序博客网 时间:2024/06/05 06:54

#include<stdbool.h>

#include<stdio.h>

#include<stdlib.h>

 

#define NUM_RANKS 13

#define NUM_SUITS 4

#define NUM_CARDS 5

bool straight, flush, four, three;

int pairs;

 

void read_cards(int num_in_rank[],int num_in_suit[]);

void analyze_hand(int num_in_rank[],int num_in_suit[]);

void print_result(void);

 

int main(void)

{

int num_in_rank[NUM_RANKS];

int num_in_suit[NUM_SUITS];

 

for(;;){

 

read_cards(num_in_rank,num_in_suit);

analyze_hand(num_in_rank,num_in_suit);

print_result();

}

}

 

void read_cards(int num_in_rank[],int num_in_suit[])

{

bool card_exists[NUM_RANKS][NUM_SUITS];

char ch, rank_ch, suit_ch;

int rank, suit;

bool bad_card;

int cards_read=0;

 

for(rank=0;rank<NUM_RANKS;rank++)

{

num_in_rank[rank]=0;

for(suit=0;suit<NUM_SUITS;suit++)

{

card_exists[rank][suit]=false;

}

}

for(suit=0;suit<NUM_SUITS;suit++)

{

num_in_suit[suit]=0;

}

while (cards_read<NUM_CARDS)

{

bad_card=false;

 

printf("Enter a card: ");

setvbuf(stdout,NULL,_IONBF,0);

 

rank_ch=getchar();

 

switch(rank_ch)

{

case'0':           exit(EXIT_SUCCESS);

case'2':           rank=0;break;

case'3':           rank=1;break;

case'4':           rank=2;break;

case'5':           rank=3;break;

case'6':           rank=4;break;

case'7':           rank=5;break;

case'8':           rank=6;break;

case'9':           rank=7;break;

case't':case 'T':  rank=8;break;

case'j':case 'J':  rank=9;break;

case'q':case 'Q':  rank=10;break;

case'k':case 'K':  rank=11;break;

case'a':case 'A':  rank=12;break;

default:           bad_card=true;

}

 

suit_ch=getchar();

switch (suit_ch)

{

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:          bad_card=true;

}

 

while((ch=getchar()) !='\n')

if (ch !=' ')

bad_card=true;

 

if(bad_card)

printf("Bad card; ignore.\n");

else if (card_exists[rank][suit])

printf("Duplicate card; ignore.\n");

else

{

num_in_rank[rank]++;

num_in_suit[suit]++;

card_exists[rank][suit]=true;

cards_read++;

}

}

}

void analyze_hand(int num_in_rank[],int num_in_suit[])

{

int num_consec=0;

int rank, suit;

 

straight=false;

flush=false;

four=false;

pairs=0;

 

for(suit=0;suit<NUM_SUITS;suit++)

if(num_in_suit[suit]==NUM_CARDS)

flush=true;

 

rank=0;

while(num_in_rank[rank]==0)rank++;

for(;rank<NUM_RANKS&&num_in_rank[rank]>0;rank++)

num_consec++;

if (num_consec==NUM_CARDS)

{

straight=true;

return;

}

 

for(rank=0;rank<NUM_RANKS;rank++)

{

if (num_in_rank[rank]==4)

four=true;

if (num_in_rank[rank]==3)

three=true;

if (num_in_rank[rank]==2)

pairs++;

}

 

 

}

 

void print_result(void)

{

if (straight && flush)

printf("Straight flush");

else if(four)

printf("Four of a kind");

else if(three && pairs==1)

printf("Full house");

else if(flush)

printf("Flush");

else if(straight)

printf("Straight");

else if(three)

printf("Three of a kind");

else if(pairs==2)

printf("Two pairs");

else if(pairs==1)

printf("Pair");

else

printf("High card");

 

printf("\n\n");

}

1 0