无聊用 javascript 写了一个 24 点算法

function result(a,b, op){
    if(op == '+'){
        return a + b;
    }
    if(op == '-'){
        return a - b;
    }
    if(op == '*'){
        return a * b;
    }
    if(op == '/'){
        return a / b;
    }

}

function check(a, b, op){
    if(op == '/' && b == 0){
        return false;
    }
    return true;
}

function arrayCopy(a)
{
    var b = [];
    for(var i = 0; i < a.length; i++){
        b.push(a[i]);
    }
    return b;
}

function arrayRemove(a,n, r)
{
    var b = [];
    for(var i = 0; i < a.length; i++){
        if(n == i){
            b.push(r);
        }else if((n+1) != i ){
            b.push(a[i]);
        }
    }
    return b;
}

function arrayDel(a, n)
{
    var b = [];
    for(var i = 0; i < a.length; i++){
        if(n != i){
            b.push(a[i]);
        }
    }
    return b;

}

function cal(a, op, list, oplist, ord)
{
    if(op.length < 1){
        return ;
    }
    var op2 = arrayCopy(op);
    for(var i = 0; i < op2.length; i++){
        var a2 = arrayCopy(a);
        if(check(a2[i], a[i+1], op2[i])){
            var r = result(a2[i], a[i+1], op2[i]);
            var ss = "("+a2[i] + op2[i] + a[i+1]+" = "+r+ ")"
            ord.push(ss);
            if(op.length == 1 && r == 24){
                console.log(list, oplist, ord);
            }else{
                var a3 = arrayRemove(a2, i, r);
                var op3 = arrayDel(op2, i);
                cal(a3, op3, list, oplist, ord);
            }
            ord.pop();
        }
    }
}


function optest(a){
    var op = ['+', '-','*','/'];

    var b = [];
    for(var i = 0; i < 4; i++){
        b.push(op[i]);
        for(var j = 0; j < 4; j++){
            b.push(op[j]);
            for(var k = 0; k < 4 ; k++){
                b.push(op[k]);
                var out = [];
                cal(a, b, a, b, out);
                b.pop();
            }
            b.pop();
        }
        b.pop();
    }
}
function test(a,b){
    if(b.length  > 0){
        for(var j = 0; j < b.length; j++){
            a.push(b[j]);
            var c = [];
            for(var i = 0; i < b.length; i++){
                if(i != j){
                    c.push(b[i]);
                }
            }
            test(a, c);
            a.pop();
        }
    }else{
        optest(a);
    }
}


function test24(list){
    var a = [];
    test(a, list);
}
test24([1, 2, 3, 4]);



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值