{ "title": "C++ 扑克牌组合判定程序代码", "description": "使用 C++ 编写一个程序,能够判定一副五张牌中存在的扑克组合类型,包括皇家同花顺、同花顺、四条、葫芦、同花、顺子、三条、两对、一对和高牌。", "keywords": "C++, 扑克, 算法, 组合, 皇家同花顺, 同花顺, 四条, 葫芦, 同花, 顺子, 三条, 两对, 一对, 高牌", "content": "```cpp #include<bits/stdc++.h> using namespace std; map<char,int> mp={{'T',10},{'J',11},{'Q',12},{'K',13},{'A',14}}; struct poker{ int val;//牌值 char sz;//花色 bool operator <(const poker& a)const{//便于排序 return val<a.val; } }p[5]; bool flush(){ for(int i=1;i<5;i++) if(p[i].sz!=p[i-1].sz)return false; return true; } bool straight(){ for(int i=1;i<5;i++) if(p[i].val!=p[i-1].val+1)return false; return true; } bool four(){ int cnt=1; for(int i=1;i<5;i++) if(p[i].val==p[i-1].val)cnt++; else cnt=1; return cnt==4; } bool three(){ int cnt=1; for(int i=1;i<5;i++) if(p[i].val==p[i-1].val)cnt++; else cnt=1; return cnt==3; } bool full_house(){ return (p[0].val==p[1].val&&p[1].val==p[2].val&&p[3].val==p[4].val)||(p[0].val==p[1].val&&p[2].val==p[3].val&&p[3].val==p[4].val); } bool two_pair(){ int cnt=0; for(int i=1;i<5;i++) if(p[i].val==p[i-1].val)cnt++; if(cnt!=2)return false; return true; } bool one_pair(){ int cnt=0; for(int i=1;i<5;i++) if(p[i].val==p[i-1].val)cnt++; if(cnt!=1)return false; return true; } int main(){ for(int i=0;i<5;i++){ string s; cin>>s; if(s[0]>='2'&&s[0]<='9')p[i].val=s[0]-'0'; else p[i].val=mp[s[0]]; p[i].sz=s[1]; } sort(p,p+5); if(p[0].val==10&&p[1].val==11&&p[2].val==12&&p[3].val==13&&p[4].val==14&&flush())cout<<"Royal Flush"; else if(straight()&&flush())cout<<"Straight Flush"; else if(four())cout<<"Four of a Kind"; else if(full_house())cout<<"Full House"; else if(flush())cout<<"Flush"; else if(straight())cout<<"Straight"; else if(three())cout<<"Three of a Kind"; else if(two_pair())cout<<"Two Pair"; else if(one_pair())cout<<"Pair"; else cout<<"High Card"; return 0; }


**程序说明:**

1. **结构体 poker**:用于存储每张牌的信息,包括牌值 (val) 和花色 (sz)。
2. **映射 mp**:将牌面字符 ('T', 'J', 'Q', 'K', 'A') 映射到对应的牌值。
3. **函数 flush()**:判断是否为同花。
4. **函数 straight()**:判断是否为顺子。
5. **函数 four()**:判断是否为四条。
6. **函数 three()**:判断是否为三条。
7. **函数 full_house()**:判断是否为葫芦。
8. **函数 two_pair()**:判断是否为两对。
9. **函数 one_pair()**:判断是否为一对。
10. **主函数 main()**:
    * 输入五张牌的信息。
    * 对牌值进行排序。
    * 依次判断各种组合类型,并输出结果。

**示例:**

输入:

10h Jh Qh Ah Kh


输出:

Royal Flush


**代码解析:**

1. **数据结构**
    * 使用结构体 poker 来存储每张牌的信息,包括牌值 val 和花色 sz。
    * 使用 map<char, int> mp 来存储牌面字符到牌值的映射关系。

2. **算法**
    * 使用函数分别判断不同类型的扑克组合,例如 flush() 用于判断同花,straight() 用于判断顺子等。
    * 使用 if-else 语句根据判断结果输出相应的组合类型。

3. **排序**
    * 在主函数中,使用 sort() 函数对牌值进行排序,方便判断顺子和四条等组合。

4. **输入输出**
    * 使用 cin >> s 读取每张牌的信息。
    * 使用 cout << 输出判断结果。

**注意事项:**

* 代码中的花色字符 'h', 's', 'd', 'c' 分别对应红桃、黑桃、方块、梅花。
* 代码中 A 的牌值是 14,而不是 1,方便判断皇家同花顺。
* 代码中默认 A 作为高牌。
* 该程序仅用于判断扑克组合类型,并没有考虑其他规则,例如扑克牌的数量等。
C++ 扑克牌组合判定程序代码

原文地址: https://www.cveoy.top/t/topic/mGNq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录