C++ 扑克牌组合判定程序代码
{ "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 作为高牌。
* 该程序仅用于判断扑克组合类型,并没有考虑其他规则,例如扑克牌的数量等。
原文地址: https://www.cveoy.top/t/topic/mGNq 著作权归作者所有。请勿转载和采集!