第三至五题
#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("");
}
}
第六题
#include <stdio.h>
#include <stdlib.h>
#define N 20
float stack[N];
float num,tmp;
int top;
void read_num();
void push_num();
void print_num();
void out_num_add();
void out_num_sub();
void out_num_mul();
void out_num_div();
int main()
{
top=0;
printf("Enter an RPN expression:");
read_num();
print_num();
return 0;
}
void read_num()
{
char ch;
while((ch=getchar())!='\n')
{
if(ch>=48 && ch<=57)
{
switch(ch)
{
case '0':num=0;break;
case '1':num=1;break;
case '2':num=2;break;
case '3':num=3;break;
case '4':num=4;break;
case '5':num=5;break;
case '6':num=6;break;
case '7':num=7;break;
case '8':num=8;break;
case '9':num=9;break;
default:break;
}
push_num();
}
switch(ch)
{
case '+':out_num_add();break;
case '-':out_num_sub();break;
case '*':out_num_mul();break;
case '/':out_num_div();break;
default:break;
}
}
}
void push_num()
{
top++;
stack[top]=num;
}
void out_num_add()
{
tmp=stack[top];
top--;
stack[top]=tmp+stack[top];
}
void out_num_sub()
{
tmp=stack[top];
top--;
stack[top]=stack[top]-tmp;
}
void out_num_mul()
{
tmp=stack[top];
top--;
stack[top]=stack[top]*tmp;
}
void out_num_div()
{
tmp=stack[top];
top--;
stack[top]=stack[top]/tmp;
}
void print_num()
{
if(top == 1)
{
printf("Value of expression:%.2f\n",stack[top]);
}
else if(top>=N)
{
printf("Expression is too complex.\n");
}
else if (top == 0)
{
printf("Expression is pop.\n");
}
else
{
printf("Expression is lack.\n");
}
}
第七题
#include<stdio.h>
#include<stdlib.h>
#define MAX_DIGITS 10
int max_digits,i;
char ch;
char digits[MAX_DIGITS];
void clear_digits();
void first_line_digits();
void second_line_digits();
void third_line_digits();
int main()
{
clear_digits();
first_line_digits();
second_line_digits();
third_line_digits();
return 0;
}
void clear_digits()
{
max_digits=0;
char ch;
while((ch=getchar())!='\n')
{
if(ch>=48 && ch<=57)
{
digits[max_digits]=ch;
max_digits++;
}
}
}
void first_line_digits()
{
for(i=0;i<=max_digits;i++)
{
ch=digits[i];
switch(ch)
{
case '0':printf(" _ ");break;
case '1':printf(" ");break;
case '2':printf(" _ ");break;
case '3':printf(" _ ");break;
case '4':printf(" ");break;
case '5':printf(" _ ");break;
case '6':printf(" _ ");break;
case '7':printf(" _ ");break;
case '8':printf(" _ ");break;
case '9':printf(" _ ");break;
}
printf(" ");
}
puts("");
}
void second_line_digits()
{
for(i=0;i<=max_digits;i++)
{
ch=digits[i];
switch(ch)
{
case '0':printf("| |");break;
case '1':printf(" |");break;
case '2':printf(" _|");break;
case '3':printf(" _|");break;
case '4':printf("|_|");break;
case '5':printf("|_ ");break;
case '6':printf("|_ ");break;
case '7':printf(" |");break;
case '8':printf("|_|");break;
case '9':printf("|_|");break;
}
printf(" ");
}
puts("");
}
void third_line_digits()
{
for(i=0;i<=max_digits;i++)
{
ch=digits[i];
switch(ch)
{
case '0':printf("|_|");break;
case '1':printf(" |");break;
case '2':printf("|_ ");break;
case '3':printf(" _|");break;
case '4':printf(" |");break;
case '5':printf(" _|");break;
case '6':printf("|_|");break;
case '7':printf(" |");break;
case '8':printf("|_|");break;
case '9':printf(" _|");break;
}
printf(" ");
}
puts("");
}