C程序:德州扑克:写一个程序循环读取 5 张手牌 (输入 0 结束程序),然后把手中的牌分为下面某一类:1.同花顺 2.四张 3.葫芦 (3 + 2) 4. 同花 5. 顺子 6.三张 7.两对 8. 一对 9.高牌。
时间: 2024-03-24 13:41:44 浏览: 279
C语言编写的扑克牌发牌程序
4星 · 用户满意度95%
好的,这是一个非常有趣的问题。下面是一个可能的解决方案:
```c
#include <stdio.h>
#include <stdlib.h>
// 判断两个数的大小
int cmp(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
// 判断是否为同花
int is_flush(int hand[]) {
int suit = hand[0] % 4;
for (int i = 1; i < 5; i++) {
if (hand[i] % 4 != suit) {
return 0;
}
}
return 1;
}
// 判断是否为顺子
int is_straight(int hand[]) {
qsort(hand, 5, sizeof(int), cmp);
for (int i = 1; i < 5; i++) {
if (hand[i] - hand[i - 1] != 1) {
return 0;
}
}
return 1;
}
// 判断是否为同花顺
int is_straight_flush(int hand[]) {
return is_flush(hand) && is_straight(hand);
}
// 判断是否为四张
int is_four_of_a_kind(int hand[]) {
qsort(hand, 5, sizeof(int), cmp);
if (hand[0] == hand[3] || hand[1] == hand[4]) {
return 1;
}
return 0;
}
// 判断是否为三张
int is_three_of_a_kind(int hand[]) {
qsort(hand, 5, sizeof(int), cmp);
if (hand[0] == hand[2] || hand[1] == hand[3] || hand[2] == hand[4]) {
return 1;
}
return 0;
}
// 判断是否为两对
int is_two_pairs(int hand[]) {
qsort(hand, 5, sizeof(int), cmp);
if ((hand[0] == hand[1] && hand[2] == hand[3]) ||
(hand[0] == hand[1] && hand[3] == hand[4]) ||
(hand[1] == hand[2] && hand[3] == hand[4])) {
return 1;
}
return 0;
}
// 判断是否为一对
int is_one_pair(int hand[]) {
qsort(hand, 5, sizeof(int), cmp);
for (int i = 0; i < 4; i++) {
if (hand[i] == hand[i + 1]) {
return 1;
}
}
return 0;
}
// 判断手牌的类型
int hand_type(int hand[]) {
if (is_straight_flush(hand)) {
return 1;
}
if (is_four_of_a_kind(hand)) {
return 2;
}
if (is_three_of_a_kind(hand) && is_one_pair(hand)) {
return 3;
}
if (is_flush(hand)) {
return 4;
}
if (is_straight(hand)) {
return 5;
}
if (is_three_of_a_kind(hand)) {
return 6;
}
if (is_two_pairs(hand)) {
return 7;
}
if (is_one_pair(hand)) {
return 8;
}
return 9;
}
int main() {
int hand[5];
while (1) {
printf("请输入 5 张手牌 (输入 0 结束程序):\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &hand[i]);
if (hand[i] == 0) {
return 0;
}
}
int type = hand_type(hand);
switch (type) {
case 1:
printf("同花顺\n");
break;
case 2:
printf("四张\n");
break;
case 3:
printf("葫芦\n");
break;
case 4:
printf("同花\n");
break;
case 5:
printf("顺子\n");
break;
case 6:
printf("三张\n");
break;
case 7:
printf("两对\n");
break;
case 8:
printf("一对\n");
break;
case 9:
printf("高牌\n");
break;
}
}
return 0;
}
```
这个程序首先定义了一些函数来判断手牌的类型。其中,`is_flush` 函数用于判断是否为同花,`is_straight` 函数用于判断是否为顺子,`is_straight_flush` 函数用于判断是否为同花顺,`is_four_of_a_kind` 函数用于判断是否为四张,`is_three_of_a_kind` 函数用于判断是否为三张,`is_two_pairs` 函数用于判断是否为两对,`is_one_pair` 函数用于判断是否为一对,`hand_type` 函数用于判断手牌的类型。
最后,程序在主函数中循环读取 5 张手牌,并根据手牌的类型输出对应的结果。
阅读全文