判定德州扑克的牌型

来源:互联网 发布:上位机串口控制单片机 编辑:程序博客网 时间:2024/06/08 07:29

给定5张牌

共有以下几种情况:

1.四个一样的

2.三个一样的加一对

3.顺子

4.三个一样的加两张单牌

5.两对

6.一对

7.其他

#include<stdio.h>#define SI_GE_YI_YANG_DE 0#define SAN_GE_JIA_YI_DUI 1#define SHUN_ZI 2#define SAN_GE_JIA_ER_DAN 3             #define LIANG_DUI 4#define YI_DUI 5#define QI_TA 6                                       //宏定义void sort(int a[],int lenA)                           //冒泡排序,这个很重要,可以使得下面的判断穷举法的情况变得很少{int i,j,temp;for(i = 0;i < lenA;i++){for(j = i + 1;j < lenA;j++){if(a[i] > a[j]){temp = a[i];a[i] = a[j];a[j] = temp;}}}}int poker(int a[]){sort(a,5);if((a[0] == a[1] && a[1] == a[2] && a[2] == a[3] && a[3] != a[4])|| (a[0] != a[1] && a[1] == a[2] && a[2] == a[3] && a[3] == a[4])){return SI_GE_YI_YANG_DE;}if( ((a[0] == a[1]) && (a[1] == a[2]) && (a[3] != a[2]) && (a[3] == a[4]))|| ((a[0] == a[1]) && (a[1] != a[2]) && (a[2] == a[3]) &&(a[3] == a[4]))){return SAN_GE_JIA_YI_DUI;}if( (a[4] == a[3] + 1) && (a[3] == a[2] + 1)&&(a[2] == a[1] + 1) && (a[1] == a[0] + 1)){return SHUN_ZI;}if( ((a[0] == a[1]) && (a[1] == a[2]) && (a[3] != a[2]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] == a[2]) && (a[2] == a[3]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] != a[2]) && (a[2] == a[3]) && (a[3] == a[4]))){return SAN_GE_JIA_ER_DAN;}if( ((a[0] == a[1]) && (a[1] != a[2]) && (a[2] == a[3]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] == a[2]) && (a[2] != a[3]) && (a[3] == a[4]))|| ((a[0] == a[1]) && (a[1] != a[2]) && (a[2] != a[3]) && (a[3] == a[4]))){return LIANG_DUI;}if( ((a[0] == a[1]) && (a[1] != a[2]) && (a[2] != a[3]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] == a[2]) && (a[2] != a[3]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] != a[2]) && (a[2] == a[3]) && (a[3] != a[4]))|| ((a[0] != a[1]) && (a[1] != a[2]) && (a[2] != a[3]) && (a[3] == a[4]))){return YI_DUI;}return QI_TA;}int main(){int a[] = {1,4,4,5,5};printf("%d\n", poker(a));return 1;}


 

 

原创粉丝点击