admin管理员组文章数量:1516870
判断7张扑克牌是否含有同花顺(5张同花顺子)
题目:判断扑克牌是否为同花顺
描述
什么是同花顺
5张牌,牌面数字连续,则是顺子,花色相同为同花,花色相同且数字连续,则是同花顺
扑克牌四种花色♠,♥,♣,◆,每个花色从A到K共13张牌,一共4*13=52张
要求
用0-51表示这52张牌,按照顺序,♠A-♠K为0-12,♥A-♥K为13-25,♣A-♣K为26-38,◆A-◆K为39-51
一副牌,发出7张牌,存于数组arr中,实现一个函数返回true或false判断是否有同花顺
解析:
判断数组是否为顺子,则要进行去重,排序,
首先去重排序后的数组要满足长度>=5
其次判断是否顺子:数组中只要有一个数字num+4 等于其在此数组中的下标i+4,即arr[i] + 4 = arr[i+4]
然后判断是否同花:0<=arr[i]<=12 spade13<=arr[i]<=25 heart26<=arr[i]<=38 club39<=arr[i]<=51 diamand
代码
function judge(arr) {let result = Array.from(new Set(arr)).sort((a, b) => a - b);if (result.length < 5) return falsefor (let i = 0; i < result.length; i++) {if (result[i] + 4 === result[i + 4]) { //顺子if (result[i] <= 12 && result[i] > 0 && result[i + 4] <= 12 && result[i + 4] >= 0) {return true} else if (result[i] <= 25 && result[i] > 13 && result[i + 4] <= 25 && result[i + 4] >= 13) {return true} else if (result[i] <= 38 && result[i] > 26 && result[i + 4] <= 38 && result[i + 4] >= 26) {return true} else if (result[i] <= 51 && result[i] > 39 && result[i + 4] <= 51 && result[i + 4] >= 39) {return true}}}return false
}let arr = [9, 5, 6, 7, 7, 8, 0, 11]
let arr1 = [0, 4, 6, 7, 8, 9, 9, 11]
let arr2 = [0,5,2,3,6,4,8]
console.log(judge(arr)); //true
console.log(judge(arr1)); //false
console.log(judge(arr2)); //true
其实这样看着上面的代码其实不够简洁,我们可以把他们相同的区间合并,代码如下
function judge(arr) {let result = Array.from(new Set(arr)).sort((a, b) => a - b);if (result.length < 5) return falsefor (let i = 0; i < result.length; i++) {if (result[i] + 4 === result[i + 4]) { //顺子if (result[i] <= 8 && result[i] > 0) {return true} else if (result[i] <= 21 && result[i] > 13) {return true} else if (result[i] <= 34 && result[i] > 26) {return true} else if (result[i] <= 47 && result[i] > 39) {return true}}}return false
}
这样看代码简洁了很多,但是还是有很多的if else语句,我们还可以用策略模式来替换if else语句
// 分别封装♠,♥,♣,◆
function spade(item) {return item >= 0 && item <= 8
}
function heart(item) {return item >= 13 && item <= 21
}
function club(item) {return item >= 26 && item <= 34
}
function diamand(item) {return item >= 39 && item <= 47
}function judge(arr) {let result = Array.from(new Set(arr)).sort((a, b) => a - b);if (result.length < 5) return falsefor (let i = 0; i < result.length; i++) {if (result[i] + 4 === result[i + 4]) {// 或 || 只要有一个是true,则返回的值都为truereturn spade(result[i]) || heart(result[i]) || club(result[i]) || diamand(result[i])}}return false
}
没了,就这样
本文标签: 判断7张扑克牌是否含有同花顺(5张同花顺子)
版权声明:本文标题:判断7张扑克牌是否含有同花顺(5张同花顺子) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1687508145a110246.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论