zoukankan      html  css  js  c++  java
  • 二十四点算法 java实现

    问题:

      给出四个数,不可以重复使用,可以用+ - * /和括号,怎么得出24?

    代码:

       

     1     //return -1 表示当前方法不行  
     2         private int workByStep(int op,int num1,int num2)  
     3         {  
     4             int temp=-1;  
     5             if(op==0)  
     6             {  
     7                 temp= num1+num2;  
     8             }else if(op==1)  
     9             {  
    10                 temp=num1-num2;  
    11             }else if(op==2)  
    12             {  
    13                 temp=num1*num2;  
    14             }else if(op==3)  
    15             {  
    16                 temp=(int)(num1/num2);  
    17             }  
    18             //只要没有有小数生成,即使有负数也没问题,只要中的结果为24,却没有发生约数即可  
    19             if(num1%num2!=0&&op==3)  
    20             {  
    21                 return -1;  
    22             }  
    23             return temp;  
    24         }  
    25         public int work(int num1,int num2,int num3,int num4)  
    26         {  
    27             //每一种确定好的数组顺序,一共有4*4*4=64种运算方法。  
    28             //遍历4中运算法则  
    29             //0 +  
    30             //1 -  
    31             //2 *  
    32             //3 /  
    33             int temp1=-1,temp2=-1,temp3=-1;  
    34             int count=0;    //一共有多少种方法  
    35             for(int op1=0;op1<4;op1++)  
    36             {  
    37                 temp1=workByStep(op1,num1,num2);  
    38                 /*if(temp==-1) 
    39                 { 
    40                     System.out.println("continue"); 
    41                     continue; 
    42                 }*/  
    43                 for(int op2=0;op2<4;op2++)  
    44                 {  
    45                     temp2=workByStep(op2,temp1,num3);  
    46                     /*if(temp==-1) 
    47                     { 
    48                         System.out.println("continue"); 
    49                         continue; 
    50                     }*/  
    51                     for(int op3=0;op3<4;op3++)  
    52                     {  
    53                         temp3=workByStep(op3,temp2,num4);  
    54                         if(temp3==TOTAL)  
    55                         {  
    56                             count++;  
    57                             System.out.println("计算方法为:"+  
    58                                     num1+" "+op1+" "+num2+" "+op2  
    59                                     +" "+num3+" "+op3+" "+num4+"="+TOTAL);  
    60                         }  
    61                     }  
    62                 }  
    63             }  
    64             return count;  
    65         }  
    66         public void sortArray(int[] nums)  
    67         {  
    68             int count=0;  
    69             //一共有4*3*2*1=24中排序  
    70             for(int i=0;i<4;i++)  
    71             {  
    72                 for(int j=0;j<4;j++)  
    73                 {  
    74                     for(int k=0;k<4;k++)  
    75                     {  
    76                         for(int l=0;l<4;l++)  
    77                         {  
    78                             if((j!=i)&&  
    79                                     (k!=i&&k!=j)&&  
    80                                     (l!=i&&l!=j&&l!=k))  
    81                             {  
    82                                 //count++;  
    83                                 //System.out.println(nums[i]+" "+nums[j]+" "+nums[k]+" "+nums[l]);  
    84                                 work(nums[i],nums[j],nums[k],nums[l]);  
    85                             }  
    86                         }  
    87                     }  
    88                 }  
    89             }  
    90             //debug  
    91             //System.out.println("一共有"+count+"排序方法。");  
    92     }  

    大概思路:括号只是调整顺序,所以将四个数的每种排法和每两个数之间的运算都尝试,

    一共有4*4*3*4*2*4*1=1536中情况,当然,很多情况执行第一步就可以知道不可能得到结果的了,可以进一步筛选。但是大概思路是这样的,也没有想出更好的方法。

  • 相关阅读:
    1、第一个JSP
    eclipse汉化
    学习计划与目标
    还在用系统自带的?那你那就OUT了!
    zabbix api调用
    C#中使用泛型对照使用通用基础类型效率减少近一倍
    Android应用架构之MVP---&gt;天气实例
    JavaFX打包到Android上
    2015 Multi-University Training Contest 3
    用Android Studio 执行ndk 程序
  • 原文地址:https://www.cnblogs.com/pandang/p/4849263.html
Copyright © 2011-2022 走看看