【华为练习题】求麻将清一色和牌问题
题目
题目描述:
清一色是麻将番种之一,指由一种花色的序数牌组成的和牌.
数字1-9,每个数字最多有4张牌
我们不考虑具体花色,我们只看数字组合。
刻子:三张一样的牌;如: 111, 222, 333, …, 999
顺子:三张连续的牌;如: 123, 234, 345, …, 789
对子:两张相同的牌;如: 11, 22, 33, …, 99
需要实现一个程序,判断给定牌,是否可以和牌(胡牌)。
和牌要求:
- 麻将牌张数只能是 2, 5, 8, 11, 14
- 给定牌可以组合成,除1个对子以外其他都是刻子或顺子
举例: - “11” -> “11”, 1对子,可以和牌 - “11122233” -> “111”+“222”+“33”, 2刻子,1对子,可以
- “11223344567” -> “11”+“234”+“234”+“567”, 1对子,3顺子,可以
-> “123”+“123”+“44”+“567”, 另一种组合,也可以
输入描述:
合法C字符串,只包含’1’-‘9’,且已经按从小到大顺序排好;字符串长度不超过15。同一个数字最多出现4次,与实际相符。
输出描述:
C字符串,“yes"或者"no”
示例1
输入
2244
输出
24 //此处是试题原本模样,应该输出no
分析
可用递归的方式求解,在字符串中搜索刻子和顺子,找到之后再对去掉刻子或顺子之后的字符串进行递归搜索,直到字符串长度小于3为止,若最终剩余字符串长度为2且两个字符相同时则胡牌,否则不能胡牌。
解答
#include <iostream>
#include <string>
using namespace