扑克牌游戏“快算24”算法

本文介绍了快算24扑克牌游戏的规则,并分享了一个使用JavaScript编写的算法,该算法通过递归的方式判断四张牌的组合是否能通过加减乘除运算得到24。文章提供了C2、C3、C4类的定义,以及程序的主入口和部分运行结果示例。
摘要由CSDN通过智能技术生成

快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次。各地玩法还有点差别,有的只算1-10,其它抽出来;有的地方把整幅牌都算上,把其中J当作11,Q当作12,K当作13,小王当作15,大王当作18. 个人觉得后者不但省了理牌的功夫还更能锻炼人。

绝大多数四张牌的组合都容易算出来,有部分就要费点脑筋了,如5,5,5,1;3,7,3,7;12,12,12,10...,当然也有完全算不出来的,如5,7,8,11;1,1,6,11...从规律上讲,似乎5,7,11,13这样的素数参与越多越是难算。

算24也是有窍门的,那就是逐步缩小范围,具体来说是看三个数运算能否和第四个数通过加减乘除得到24,继而看三个数操作能否得到24和第四个数的四则运算结果,继而看两个数的操作能否得到第三个数和上次结果的四则运算结果。具体比如有2,3,4,12四个数,看到12后想2,3,4是否能组合个2出来,然后想到2X3-4的方案,或者2X(4-3)的方案。

按照这个思维我编了下面的程序。具体思路是这样的,先制作一个C4类(2,3,4,12,24),这个类会形成24种组合(以及六种特殊组合方式),再由24种组合生成6种子方案,子方案又生成六种孙方案,最后挑选出符合条件的结果。

代码是这样的:
//======================================================
// 算24 C4 1.02
// 整理代码,去掉一些多余冗杂的地方
// 2018年4月23日 完成
// 2019年3月2日修改
//======================================================

//======================================================
// C2类,用于判断两个数通过加减乘除运算能否得到某个结果
// C代表Caculate,2代表两个操作数
// op1:操作数1,op2:操作数2,result,结果
//======================================================
function C2(op1,op2,result){
var obj=new Object();
obj.op1=op1;
obj.op2=op2;
obj.result=result;

obj.findComputeMethods=function(){
    var micro=0.000001 // 定义一个极小量,运算结果绝对值小于它就算相等

    var arr=[];

    // op1+op2
    if(Math.abs(result-(op1+op2))<micro){
        arr.push(op1+"+"+op2);  
    }

    // op1*op2
    if(Math.abs(result-op1*op2)<micro){
        arr.push(op1+"*"+op2);  
    }

    // op1-op2
    if(Math.abs(result-(op1-op2))<micro){
        arr.push(op1+"-"+op2);  
    }

    // op2-op1
    if(Math.abs(result-(op2-op1))<micro){
        arr.push(op2+"-"+op1);  
    }

    // op1/op2
    if(Math.abs(result-op1/op2)<micro){
        arr.push(op1+"/"+op2);  
    }

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值