题目描述:给定一组扑克牌判斷其中是否存在五张扑克牌组成同花顺的牌型。
每张扑克牌由花色和点值组成花色包括:黑桃(S)、红桃(H)、梅花(C)、方片(D);點值从小到大包括:2、3、4、5、6、7、8、9、10、J、Q、K、A。
组成同花顺的五张牌需要满足两个条件:
2、连成顺子或者点值为A、2、3、4、5;
输入描述:每张扑克牌通过花色和点值拼接成的一个字符串表示,例如红桃10为H10方片A表示成DA。
第一行输入一个正整数表示输入用例数。
第二行开始每行输入一个用例,每个用例先输入一个正整数m表示总的扑克牌数。紧接着输入m个扑克牌
每个用例里的扑克牌都从一副牌中抽取。
输出描述:对应每个输入用例输出一行结果包含一个字符。Y表示存在五张牌组成同花顺N表示不存在。
题目给出的输入示例貌似并不苻合题目要求第3、4行的输入都出现了相同的牌HK,不知道是不是因为出题的失误按照本文的做法,如果一行中出现相同的牌程序将会產生异常。
下面是我的C++代码
1、首先对牌按照花色分组,每个分组按照2、3、4、5、6、7、8、9、10、J、Q、K、A的顺序排序
2、从第二张开始遍历经过汾组和排序的牌堆。用一个整型count来计数count初值设置为1。如果遍历到的牌跟前一张牌花色相同且牌面值为前一张牌+1则count++。否则count=1
因为要考虑A、2、3、4、5这种情况,所以当count=4时如果此时读取到的牌为4,往后找跟它相同花色的A如果能找到,说明可以组成A、2、3、4、5返回。
为了方便起见就不按照在线编程的要求进行多次重复输入验证了,只测试一组输入
//当count到达4时,如果vec[i]为5则在vec中找是否有同花色的A //如果找到,直接返回true