一副牌中的五张扑克牌,

牌型1:同花顺:同一花色的顺子

牌型2:四条:四张相同数字+单张

牌型3:葫芦:三张相同的数字+一对

牌型4:同花:同一花色

牌型5:顺子:花色不一样的顺子

牌型6:三条:三张相同+两张单

牌型7:其他

说明:前面的牌型比后面的牌型大

输入由五行组成,如:

3 H
4 H
5 H
6 H
7 H

输出牌型:1

#include <iostream>
#include <map>
#include <list>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
enum CardType
{CARD_TYPE_UNKNOWN,CARD_TYPE_H,//红桃CARD_TYPE_S,//黑桃CARD_TYPE_C,//梅花CARD_TYPE_D,//方块
};
enum CardResult
{CARD_RESULT_TONGHUASHUN = 1,CARD_RESULT_SITIAO,CARD_RESULT_HULU,CARD_RESULT_TONGHUA,CARD_RESULT_SHUNZI,CARD_RESULT_SANTIAO,CARD_RESULT_OTHER,
};
struct CardInfo
{CardType eType;char byNum;
};
int split(string &str, char &a, char &b)
{if (str.length() < 3){return -1;}a = str[0];b = str[2];return 0;
}
class CardRule
{
public:CardRule();~CardRule();CardResult Judge(vector<CardInfo> &vec);void Sort(vector<CardInfo> &vec);bool IsShunzi(vector<CardInfo> &vec);bool IsTonghua(vector<CardInfo> &vec);bool IsSitiao(vector<CardInfo> &vec);bool IsHulu(vector<CardInfo> &vec);bool IsSantiao(vector<CardInfo> &vec);
private:};CardRule::CardRule()
{
}CardRule::~CardRule()
{
}
CardResult CardRule::Judge(vector<CardInfo>& vec)
{bool bTongHua = IsTonghua(vec);bool bShunzi = IsShunzi(vec);if (bTongHua && bShunzi){return CARD_RESULT_TONGHUASHUN;}else if (IsSitiao(vec)){return CARD_RESULT_SITIAO;}else if (IsHulu(vec)){return CARD_RESULT_HULU;}else if (bTongHua){return CARD_RESULT_TONGHUA;}else if (bShunzi){return CARD_RESULT_SHUNZI;}else if (IsSantiao(vec)){return CARD_RESULT_SANTIAO;}else{return CARD_RESULT_OTHER;}
}
bool Compare(CardInfo lhs, CardInfo rhs)
{return lhs.byNum < rhs.byNum ? true : false;
}
bool Unique(CardInfo lhs, CardInfo rhs)
{return lhs.byNum == rhs.byNum ? false : true;
}
void CardRule::Sort(vector<CardInfo>& vec)
{sort(vec.begin(), vec.end(), Compare);
}bool CardRule::IsShunzi(vector<CardInfo>& vec)
{for (vector<CardInfo>::iterator iter = vec.begin() + 1; iter != vec.end(); iter++){if ((*iter).byNum - (*(iter - 1)).byNum != 1){return false;}}return true;
}
bool CardRule::IsTonghua(vector<CardInfo>& vec)
{for (vector<CardInfo>::iterator iter = vec.begin()+1; iter != vec.end(); iter++){if ((*iter).eType != (*(vec.begin())).eType){return false;}}return true;
}
bool CardRule::IsSitiao(vector<CardInfo>& vec)
{map<char, int> mapCount;//<数字,个数>for (vector<CardInfo>::iterator iter = vec.begin(); iter != vec.end(); iter++){if (mapCount.end() == mapCount.find((*iter).byNum)){mapCount[(*iter).byNum] = 1;}else{mapCount[(*iter).byNum]++;}}if (mapCount.size() == 2){for (map<char, int>::iterator iter = mapCount.begin(); iter != mapCount.end(); iter++){if ((*iter).second == 4) return true;}}return false;
}
bool CardRule::IsHulu(vector<CardInfo>& vec)
{map<char, int> mapCount;//<数字,个数>for (vector<CardInfo>::iterator iter = vec.begin(); iter != vec.end(); iter++){if (mapCount.end() == mapCount.find((*iter).byNum)){mapCount[(*iter).byNum] = 1;}else{mapCount[(*iter).byNum]++;}}if (mapCount.size() == 2){for (map<char, int>::iterator iter = mapCount.begin(); iter != mapCount.end(); iter++){if ((*iter).second == 3 || (*iter).second == 2) return true;}}return false;
}
bool CardRule::IsSantiao(vector<CardInfo>& vec)
{map<char, int> mapCount;//<数字,个数>for (vector<CardInfo>::iterator iter = vec.begin(); iter != vec.end(); iter++){if (mapCount.end() == mapCount.find((*iter).byNum)){mapCount[(*iter).byNum] = 1;}else{mapCount[(*iter).byNum]++;}}if (mapCount.size() == 3){for (map<char, int>::iterator iter = mapCount.begin(); iter != mapCount.end(); iter++){if ((*iter).second == 3) return true;}}return false;
}
CardType CardConvert(char c)
{switch (c){case 'H':return CARD_TYPE_H;case 'C':return CARD_TYPE_C;case 'S':return CARD_TYPE_S;case 'D':return CARD_TYPE_D;default:break;}return CARD_TYPE_UNKNOWN;
}
int main()
{do {vector<CardInfo> vec;for (size_t i = 0; i < 5; i++){CardInfo st;memset(&st, 0, sizeof(CardInfo));std::string str;getline(cin, str);char cCardType;split(str, st.byNum, cCardType);st.eType = CardConvert(cCardType);if (st.eType == CARD_TYPE_UNKNOWN){cout << "error input" << endl;return -1;}vec.push_back(st);}CardRule cRule;cout << cRule.Judge(vec) << endl;} while (true);return 0;
}

心血来潮之朋友的一道华为笔试题——德州扑克相关推荐

  1. 2014-百度 阿里 华为笔试题

    8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面拿出来两个球:     ii.如果取出的是两 ...

  2. 华为笔试题---明明的随机数

    题目 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着 ...

  3. 数位DP--由一道微软笔试题引起

    前天晚上,一位研三的学长突然跑到我们宿舍,问我们一道微软笔试题.给你一个整数n,求出1到n这个区间范围内包含数字0的个数,例如当n=10的时候就只有10包含0,输出1,n=90就输出9.唯一的要求是此 ...

  4. 【leetcode】第394题:字符串解码(华为笔试题)

    题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...

  5. 华为笔试题 -- 多个数组按顺序合并(Java代码实现)

    华为笔试题 – 多个数组按顺序合并(Java代码实现) 题目描述: 现在有多组整数数组,需要将他们合并成一个新的数组.合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉 ...

  6. 2019届华为笔试题(软件卷)

    华为笔试题共3道编程题.第一题100分,第二题200分,第三题300分,一共600分. 第一题: 输入描述: 1.忽略小数点,例如"A1.2",认为包含整数1和2: 2.如果整数的 ...

  7. lisp压盖_华为笔试题--LISP括号匹配 解析及源码实现

    在17年校招中3道题目AC却无缘华为面试,大概是华为和东华互不待见吧!分享一道华为笔试原题,共同进步! ************************************************ ...

  8. 华为笔试题--麻将和牌问题

    题目描述: 清一色是麻将番种之一,指由一种花色的序数牌组成的和牌. 数字1-9,每个数字最多有4张牌 我们不考虑具体花色,我们只看数字组合. 刻子:三张一样的牌:如: 111, 222, 333, . ...

  9. python - 集合:华为笔试题

    华为机测题: 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性 他先用计算机生成了N个1-1000之间的随机整数(N<=1000),N是用户输入的,对于 其中重复的数字,只保留一个, ...

最新文章

  1. 剑指offer:两个链表的第一个公共结点
  2. act转MP3格式工具
  3. Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
  4. 2016年软考网络工程师考试命题范围变化之网络设备配置与复习技巧
  5. 大屏安卓车载导航刷机包_安卓手机第三方recovery是什么意思?
  6. matlab 现代信号处理,The-first-matlab-exercise 清华大学张旭东老师现代信号处理第一次matlab习题 - 下载 - 搜珍网...
  7. 25 个超棒的 WordPress 主题(2012)
  8. css 浏览器调试中不可见_前端入门必会的初级调试技巧
  9. CRC冗余校验举例和原理
  10. 简单明了 - Git 使用超详细教程
  11. 认识VLAN,并学会VLAN的划分和网络配置实例
  12. Wireshark工作笔记-TCP的状态解析,以及建立连接与关闭连接
  13. 机器学习火热,SQL 开发人员有何用?
  14. 一次TypeScript, React, Node, MongoDB的模板式前后端分离开发实践
  15. java date类1900,java - 使用javax.validation验证日期不得少于1900-01-01 - 堆栈内存溢出...
  16. 是德科技N9020A 频谱分析仪技术资料说明
  17. 一阶惯性加纯滞后模型matlab代码,一种镇定一阶惯性加纯滞后系统的线性自抗扰控制器设计方法与流程...
  18. 【app制作指南】如何制作一款属于自己的APP(移动客户端)?
  19. 360手机助手关于签名校验的分析
  20. Python爬虫进行web 数据可视化挖掘总结和分析

热门文章

  1. UOJ Round #20 T1 A. 【UR #20】跳蚤电话(组合数+树形DP)
  2. 周易卦爻解读笔记——无妄
  3. Django项目,上传图片到七牛云,阿里云OSS
  4. 【单片机原理及其应用】第三章IO口的定义与使用
  5. C++课程设计:航空客运订票系统
  6. ZABIX5.0.7源码安装详细过程
  7. zabix5.0-0 agent2实现Mysql数据库监控并监控多台mysql
  8. Python解析、提取url关键字
  9. 2019保研外校经验(清华计算机+浙大控制+清华深研院人工智能)
  10. linux下使用yum安装svn详解