题目及解题思路来源6.3算法小节:【前端工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。

思路:

1)确认5张牌中除了0,其余数字没有重复的(可以用表统计的方法);

2) 满足这样的逻辑:(max,min分别代表5张牌中的除0以外的最大值最小值)

如果没有0,则max-min=4,则为顺子,否则不是

如果有一个0,则max-min=4或者3,则为顺子,否则不是

如果有两个0,则max-min=4或者3或者2,则为顺子,否则不是。最大值和最小值在1)中就可以获得,这样就 不用排序了

实现:

        //判断数组是否有除0外的重复元素function exceptZero(arr) {var z = 0;for (var i = 0; i < arr.length; i++) {if (arr[i] === 0) {z++;}}let arr2 = [...new Set(arr)];if (arr2.length == arr.length + 1 - z) {return true;}}//将A,J,Q,K,大王,小王变为1,11,12,13,0,0function change(arr) {for (var i = 0; i < arr.length; i++) {if (arr[i] == 'A') { arr[i] = 1; }if (arr[i] == 'J') { arr[i] = 11; }if (arr[i] == 'Q') { arr[i] = 12; }if (arr[i] == 'K') { arr[i] = 13; }if (arr[i] == '大王') { arr[i] = 0; }if (arr[i] == '小王') { arr[i] = 0; }}}//数组中0元素的个数function Zero(num) {return num == 0;}//判断同花顺function tonghuaS(arr) {var len = arr.length;if (len != 5) {return console.log('请抽五张牌!');}change(arr);//sort()使用时按最高位排序,可能会不准确,用一个函数来修正它arr.sort(function (a, b) { return a - b });if (!exceptZero(arr)) {return console.log('不是同花顺');}var len0 = arr.filter(Zero).length;console.log(len0);if (len0 === 0 && arr[len - 1] - arr[len0] === 4) {return console.log('是同花顺');} else if (len0 === 1 && arr[len - 1] - arr[len0] === 3 || arr[len - 1] - arr[len0] === 4) {return console.log('是同花顺');} else if (len0 === 2 && arr[len - 1] - arr[len0] === 2 || arr[len - 1] - arr[len0] === 3 || arr[len - 1] - arr[len0] === 4) {return console.log('是同花顺');} else {return console.log('不是同花顺');}}//判断var c = ['K', 10, 'Q', 9, '大王'];tonghuaS(c);

总结:

(1)对于数组的排序,直接使用sort()可能会不准确,调用时可以使用arr.sort(function(a,b){return a-b;});来修正,原理:a代表前一个数,b代表后一个数,a-b>0时,前面的数大,两数交换位置,a-b<0时不交换。同理,若return b-a;则为倒序排列。

(2)虽然提示思路中说不用排序,但我觉得排序之后我自己看会更清晰一点(还是菜)

(3)0的个数作为判断条件那里,可以不必直接计算0的个数,而可以用indexOf(0)==lastIndexOf(0),!=和==-1来表示2个,1个和0个0,没有敲,但应该可以。

js判断扑克牌同花顺相关推荐

  1. js 判断js,css是否引入,确保不重复引入

    js 判断js,css是否引入,确保不重复引入 (2009-10-31 21:33:44) 转载▼ 标签: 杂谈 分类: js 基本原理: function loadjscssfile(filenam ...

  2. js判断手机浏览器屏幕方向

    /* js判断手机浏览器屏幕方向*/var direction = {__getOrientation: function () {if (window.orientation == 0 || win ...

  3. PHP和js判断访问设备是否是微信浏览器实例

    PHP和js判断访问设备是否是微信浏览器实例,代码非常精简,适合新手学习. js判断是否是微信浏览器: function is_weixin() { var ua = window.navigator ...

  4. js判断是否包含指定字符串

    CreateTime--2017年2月28日09:37:06 Author:Marydon js判断是否包含指定字符串 var inputValue = "thunder://piaohua ...

  5. js 判断字符串是否包含某字符串

    2019独角兽企业重金招聘Python工程师标准>>> js 判断字符串是否包含某字符串,String对象中查找子字符,indexOf var Cts = "bblText ...

  6. 移动端IOS和androi及浏览器js判断[转载]

    转载自:http://www.niutifa.com/?p=561 移动端IOS和androi及浏览器js判断: <script type="text/javascript" ...

  7. 最短JS判断是否为IE6(IE的写法)

    常用的 JavaScript 检测浏览器为 IE 是哪个版本的代码,包括是否是最人极端厌恶的 ie6 识别与检测. var isIE=!!window.ActiveXObject; var isIE6 ...

  8. js判断undefined和null

    js判断undefined var exp = undefined; if (typeof(exp) == "undefined") {alert("undefined& ...

  9. js判断是否在iframe和禁止网页在iframe中显示

    js判断在iframe里: //方式一 if (self.frameElement && self.frameElement.tagName == "IFRAME" ...

最新文章

  1. java如何恢复成eclipse项目,清理一下垃圾,Eclipse里面的项目全部不见了,怎么恢复...
  2. RxSwift ViewModel定义
  3. [react] 你有用过React的插槽(Portals)吗?怎么用?
  4. 属性文法和语法制导翻译
  5. MariaDB安装、卸载以及相关设置(Linux服务器Mysql部署)
  6. 数据:1inch昨日锁仓量达到7.7607亿美元
  7. Sql Server 日期格式化函数
  8. java获取鼠标点击的坐标_怎么我用Java窗外获取鼠标点击的坐标
  9. logo字体在线设计工具
  10. 【MOS管】基础知识和简易电路
  11. nginx: [warn] conflicting server name
  12. 一文了解DeFi主经济商,为何说它是DEX主导市场的关键
  13. 王家林Spark笔记
  14. 156 13.67用matlab答案,matlab数学实验习题全部答案(胡良剑)
  15. 特征变换:特征归一化(Normalization)作用以及方法 Min-Max、Z-Score
  16. 荧光平均值计算matlab,科学网—使用Image J进行自动荧光定量分析 - 陆绮的博文...
  17. bdg2bw(macs2的peak要修正坐标)
  18. 【胖虎的逆向之路】Android 7.0 上Magisk配合Xposed的相关问题
  19. 我的Android进阶之旅------/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy 的区别
  20. JavaRobot模拟键盘输入方法

热门文章

  1. controller(控制器)
  2. CAD制图初学入门:CAD机械软件中如何构造孔?
  3. Tracert与Traceroute[转]
  4. 对RGB三个通道进行操作示例
  5. 墙面有几种装修方法_墙面装修有几种方式
  6. PPT里怎么加入边翻页幻灯片边连续播放音乐?
  7. 手机 APP 的卖货界面
  8. matlab的三维矩阵含义
  9. 利用管道检测技术成果对城市地下空洞进行筛查分析的探讨
  10. 使用aspose-slides将ppt转pdf