`

24点计算源码

    博客分类:
  • java
 
阅读更多
public   class  Point24Utils2 {  
    private   static  String[] opArray = { "+" ,  "-" ,  "*" ,  "-" };  //运算符数组   
    private   static  String[] expArray =  new  String[ 11 ];  //表达式数组   
      
    static {  
        expArray[0 ] =  "a m1 b m2 c m3 d" ;  
        expArray[1 ] =  "(a m1 b) m2 c m3 d" ;  
        expArray[2 ] =  "(a m1 b m2 c) m3 d" ;  
        expArray[3 ] =  "((a m1 b) m2 c) m3 d" ;  
        expArray[4 ] =  "(a m1 (b m2 c)) m3 d" ;  
        expArray[5 ] =  "a m1 (b m2 c) m3 d" ;  
        expArray[6 ] =  "a m1 (b m2 c m3 d)" ;  
        expArray[7 ] =  "a m1 ((b m2 c) m3 d)" ;  
        expArray[8 ] =  "a m1 (b m2 (c m3 d))" ;  
        expArray[9 ] =  "a m1 b m2(c m3 d)" ;  
        expArray[10 ] =  "(a m1 b) m2 (c m3 d)" ;  
    }  
      
    /**  
     * 计算入口方法,返回实际的表达式  
     * @param n 用于计算24点的四个数字组成的数组  
     */   
    private   static  String execute(String[] n){  
        String a,b,c,d; //四个数字   
        String m1,m2,m3; //三个运算符   
          
        for  ( int  i= 0 ;i< 4 ;i++){  
            a = n[i];  
            for  ( int  j= 0 ;j< 4 ;j++){  
                if  ( j == i )  continue ;  //从未选的三个数字中选择一个数字   
                b = n[j];  
                for  ( int  x= 0 ;x< 4 ;x++){  
                    if  ( x == i || x == j )  continue ; //从未选的两个数字中选择一个数字   
                    c = n[x];  
                    for  ( int  y= 0 ;y< 4 ;y++){  
                        if  ( y == i || y == j || y == x )  continue ; //从未选的一个数字中选择一个数字   
                        d = n[y];  
  
                        //选择三个运算符   
                        for  ( int  ta= 0 ;ta< 4 ;ta++){  
                            m1 = opArray[ta];        
                            for  ( int  tb= 0 ;tb< 4 ;tb++){  
                                m2 = opArray[tb];        
                                for  ( int  tc= 0 ;tc< 4 ;tc++){  
                                    m3 = opArray[tc];      
                                    for  ( int  k= 0 ;k< 11 ;k++){  //11种表达式   
                                        String result = calcalate(expArray[k], a, b, c, d, m1, m2, m3);  
                                        if (result!= null )  return  result;  
                                    }  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
          
        return   null ;  
    }  
      
    /**  
     * 计算表达式  
     *   
     * @param exp 待验证的表达式模板  
     * @param a 数字1  
     * @param b 数字2  
     * @param c 数字3  
     * @param d 数字4  
     * @param m1 运算符1  
     * @param m2 运算符2  
     * @param m3 运算符3  
     */   
    private   static  String calcalate(String exp, String a, String b, String c, String d, String m1, String m2, String m3){  
        //生成计算表达式   
        exp = exp.replaceAll("a" , a);  
        exp = exp.replaceAll("b" , b);  
        exp = exp.replaceAll("c" , c);  
        exp = exp.replaceAll("d" , d);  
        exp = exp.replaceAll("m1" , m1);  
        exp = exp.replaceAll("m2" , m2);  
        exp = exp.replaceAll("m3" , m3);  
          
        //执行表达式   
        FelEngine engine = new  FelEngineImpl();  
        int  result = ((Integer)engine.eval(exp)).intValue();  
          
        if (Math.abs(result -  24 ) <  0.1 ){  
            return  exp;  
        }else {  
            return   null ;  
        }  
    }  
      
    /**  
     * 取得能算得24的四位数字的集合  
     * @param count 数字组数  
     */   
    public   static  Set<String> genNumbers( int  count){  
        Set<String> set = new  HashSet<String>();  
          
        while ( true ){  
            StringBuffer sb = new  StringBuffer();  
              
            //随机生成四位数字   
            String[] n = new  String[ 4 ];  
            for ( int  i= 0 ;i<n.length;i++){  
                String s = String.valueOf(Math.round(Math.floor(Math.random() * 9 )) +  1 );  
                n[i] = s;  
                sb.append(s);  
            }  
              
            //计算   
            String result = execute(n);  
            if (result!= null  && !set.contains(sb.toString())){  
                set.add(sb.toString());  
                System.out.println(sb.toString() + " : "  + result);  
            }  
              
            if (set.size()==count)  break ;  
        }  
          
        return  set;  
    }  
      
    public   static   void  main(String[] args) {  
        Set<String> set = genNumbers(5 );  //随机生成5组能算出24的数字   
        System.out.println("ok" );  
    }  
}  

 

分享到:
评论

相关推荐

    源码计算 源码计算 源码计算 源码计算

    在本讨论中,我们将深入探讨源码计算的相关知识点,涵盖其原理、应用以及相关的工具和技术。 源码计算的基础是编程语言的语法和语义理解。编程语言的语法规定了代码的结构和形式,而语义则关乎代码的实际含义。源码...

    彩票概率计算app源码

    彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率计算app源码 彩票概率...

    易语言24点计算器源码.rar

    24点计算器是基于数学游戏24点设计的一款程序,目标是通过四则运算将四张扑克牌上的数字组合成24。这款计算器的源码对于我们学习易语言和理解计算逻辑提供了很好的实例。 在易语言中开发24点计算器,主要涉及到以下...

    垃圾计算机易源码,计算机易源码计算机易源码,计算机易源码

    计算计算机易源码机垃圾源码 计算机易源码 计算机易源码 计算机易源码计算机易源码 计算机易源码

    易语言源码易语言接近数计算源码.rar

    易语言源码易语言接近数计算源码.rar 易语言源码易语言接近数计算源码.rar 易语言源码易语言接近数计算源码.rar 易语言源码易语言接近数计算源码.rar 易语言源码易语言接近数计算源码.rar 易语言源码易语言接近...

    微信小程序 五险一金计算 (源码)

    微信小程序 五险一金计算 (源码)微信小程序 五险一金计算 (源码)微信小程序 五险一金计算 (源码)微信小程序 五险一金计算 (源码)微信小程序 五险一金计算 (源码)微信小程序 五险一金计算 (源码)微信小程序 五险一金...

    Java 速算24点源码

    Java 速算24点源码

    易语言股票交易盈亏计算源码

    通过阅读和分析源码,我们可以了解到以下几个关键知识点: 1. 股票交易数据结构:源码中可能会定义一个数据结构来存储股票交易记录,包括买入价格、卖出价格、交易数量等关键信息。理解这种数据结构对于计算盈亏至...

    易语言源码易语言计算数学表达式源码.rar

    易语言源码易语言计算数学表达式源码.rar 易语言源码易语言计算数学表达式源码.rar 易语言源码易语言计算数学表达式源码.rar 易语言源码易语言计算数学表达式源码.rar 易语言源码易语言计算数学表达式源码.rar ...

    C#科学高级计算机源码

    8. **文件输入/输出**:源码可能涉及到读取和写入各种数据格式,如CSV、XML或二进制文件,以便保存和交换计算结果。 9. **科学计算中的精度控制**:在处理浮点数时,了解如何控制精度是必要的。源码可能会演示如何...

    微信小程序24点计算游戏 (2)(源代码+截图)

    微信小程序24点计算游戏 (2)(源代码+截图)微信小程序24点计算游戏 (2)(源代码+截图)微信小程序24点计算游戏 (2)(源代码+截图)微信小程序24点计算游戏 (2)(源代码+截图)微信小程序24点计算游戏 (2)(源代码+截图)微信...

    易语言源码易语言计算IP段源码.rar

    易语言源码易语言计算IP段源码.rar 易语言源码易语言计算IP段源码.rar 易语言源码易语言计算IP段源码.rar 易语言源码易语言计算IP段源码.rar 易语言源码易语言计算IP段源码.rar 易语言源码易语言计算IP段源码....

    小程序源码 五险一金计算 (代码+截图)

    小程序源码 五险一金计算 (代码+截图)小程序源码 五险一金计算 (代码+截图)小程序源码 五险一金计算 (代码+截图)小程序源码 五险一金计算 (代码+截图)小程序源码 五险一金计算 (代码+截图)小程序源码 五险一金计算 ...

    易语言源码重量计算工具易语言源码.rar

    易语言源码重量计算工具易语言源码.rar 易语言源码重量计算工具易语言源码.rar 易语言源码重量计算工具易语言源码.rar 易语言源码重量计算工具易语言源码.rar 易语言源码重量计算工具易语言源码.rar 易语言源码...

    微信小程序源码 五险一金计算(学习版)

    微信小程序源码 五险一金计算(学习版)微信小程序源码 五险一金计算(学习版)微信小程序源码 五险一金计算(学习版)微信小程序源码 五险一金计算(学习版)微信小程序源码 五险一金计算(学习版)微信小程序源码 五险一金...

    易语言商品房税费计算源码

    这个商品房屋税费计算源码是使用易语言编写的,主要功能是帮助用户计算购买商品房时涉及到的各种税费。在房地产交易中,税费是一个重要的组成部分,包括但不限于契税、增值税、个人所得税等,这些费用会根据购房者的...

    易语言入门计算源码.zip

    本文将深入探讨易语言的基础知识,以及如何通过"易语言入门计算源码.zip"进行学习。 易语言的核心理念是"易学、易用、易开发",它的设计目标是降低编程的门槛,让更多的人能够参与到程序设计中来。易语言的语法结构...

    易语言源码易语言计算直线点群源码.rar

    易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码易语言计算直线点群源码.rar 易语言源码...

    C语言二十四点游戏源码+注释.zip

    【标题】: "C语言二十四点游戏源码+注释.zip" 这个压缩包包含的是一个用C语言编写的二十四点游戏的源代码,它是一个基于数学逻辑和算法的小型游戏项目。二十四点游戏通常需要玩家从四张1到13的扑克牌中找到运算方式...

    android 24点游戏 源码

    自动计算24点功能通常通过算法实现,该算法需要遍历所有可能的组合,检查四个数是否可以通过加减乘除和括号操作得到24。这部分代码可能会包含递归或循环,以及对数学表达式的解析和求值。 5. **事件监听**: 用户...

Global site tag (gtag.js) - Google Analytics