24点java代码

这是24点游戏的代码,输入4个数(空格隔开),输出4个数的不同组合,算出24。输出所有结果,答案会因为交换顺序而有重复。
很抱歉没有注释。。。

package _24net;

import java.util.Scanner;

public class _24net {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scanner = new Scanner(System.in);
    int[] a= {0,0,0,0};
    for(int i = 0; i< 4;i++){
        a[i] = scanner.nextInt();
    }
    f(a,3);
    System.out.println("over");
}

private static void f(int[] a,int b) {
    if(b==0){
        f2(a,3,"");
        return;
    }
    int t;
    for(int i = b;i >= 0; i--){
        t = a[i];
        a[i] = a[b];
        a[b] = t; 
        f(a, b-1);
        t = a[i];
        a[i] = a[b];
        a[b] = t; 
    }

}

private static void f2(int[] a,int b,String s) {
    if(b==0){
        if(a[0]==24)
        System.out.println(s);
        return;
    }
    if(b==2){
        int m = a[2];
        a[2] = a[0];
        a[0] = m;
        int t;
        t = a[b-1];
        a[b-1] = a[b]+t;
        f2(a, b-1,s+a[b]+" + "+t+" = "+a[b-1]+"; ");
        a[b-1] = t; 

        t = a[b-1];
        a[b-1] = a[b]-t;
        f2(a, b-1,s+a[b]+" - "+t+" = "+a[b-1]+"; ");
        a[b-1] = t; 

        t = a[b-1];
        a[b-1] = a[b]*t;
        f2(a, b-1,s+a[b]+" * "+t+" = "+a[b-1]+"; ");
        a[b-1] = t; 

        t = a[b-1];
        if(t != 0 ){
            a[b-1] = a[b]/t;
            f2(a, b-1,s+a[b]+" / "+t+" = "+a[b-1]+"; ");
            a[b-1] = t;
        }

        t = a[b-1];
        if( a[b] != 0 ){
            a[b-1] = t/a[b];
            f2(a, b-1,s+t+" / "+a[b]+" = "+a[b-1]+"; ");
            a[b-1] = t;
            }
        m = a[2];
        a[2] = a[0];
        a[0] = m;
    }

    int t1;
    t1 = a[b-1];
    a[b-1] = a[b]+t1;
    f2(a, b-1,s+a[b]+" + "+t1+" = "+a[b-1]+"; ");
    a[b-1] = t1; 

    t1 = a[b-1];
    a[b-1] = a[b]-t1;
    f2(a, b-1,s+a[b]+" - "+t1+" = "+a[b-1]+"; ");
    a[b-1] = t1; 

    t1 = a[b-1];
    a[b-1] = a[b]*t1;
    f2(a, b-1,s+a[b]+" * "+t1+" = "+a[b-1]+"; ");
    a[b-1] = t1; 

    t1 = a[b-1];
    if(t1 != 0){
        if(a[b]%t1==0){
        a[b-1] = a[b]/t1;
        f2(a, b-1,s+a[b]+" / "+t1+" = "+a[b-1]+"; ");
        a[b-1] = t1;
        }
    }

    t1 = a[b-1];
    if(a[b] != 0){
        if(t1%a[b]==0){
        a[b-1] = t1/a[b];
        f2(a, b-1,s+t1+" / "+a[b]+" = "+a[b-1]+"; ");
        a[b-1] = t1;
        }
    }

}   

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值