用java 编写24点 cmd 执行

import java.io.*;

public class NNumCalculateToM {

final static double PRECISION = 1E-6;
final static int NUM = 4;
final static int RESULT = 24;

static double number[];       
static String[] expression;   

static boolean circule(int n)
{
   if(n == 1)
   {
    if(Math.abs(number[0] - RESULT) < PRECISION)
    {
     System.out.println(expression[0]);
     return true;
    }
    else
    {
     return false;
    }
   }
  
   for(int i=0; i<n; ++i)
    for(int j=i+1; j<n; ++j)
    {
     double numi,numj;
     String expi,expj;
    
     numi = number[i];
     numj = number[j];
     number[j] = number[n-1];
    
     expi = expression[i];
     expj = expression[j];
     expression[j] = expression[n-1];
    
     //加的处理
     if(n > 2)
      expression[i] = "(" + expi + "+" + expj + ")";
     else
      expression[i] = expi + "+" + expj;
     number[i] = numi + numj;
     if(circule(n-1))
      return true;
    
     //减的处理,有两种情况expi-expj,expj-expi
     if(n > 2)
      expression[i] = '(' + expi + '-' + expj + ')';
     else
      expression[i] = expi + '-' + expj; 
             number[i] = numi - numj;
             if(circule(n-1))
                 return true;

             if(n > 2)
      expression[i] = '(' + expj + '-' + expi + ')';
     else
      expression[i] = expj + '-' + expi; 
             number[i] = numj - numi;
             if(circule(n-1))
                 return true;
             
             //乘的处理
     expression[i] = expi + "*" + expj;
     number[i] = numi * numj;
     if(circule(n-1))
      return true;
    
     //除的处理,有两种情况expi/expj,expj/expi
     if(numj > PRECISION)
     {
      expression[i] = expi + '/' + expj; 
              number[i] = numi / numj;
              if(circule(n-1))
                  return true;
     }
    
     if(numi > PRECISION)
     {
      expression[i] = expj + '/' + expi; 
              number[i] = numj / numi;
              if(circule(n-1))
                  return true;
     }
    
     //恢复数组
     number[i] = numi;
     number[j] = numj;
     expression[i] = expi;
     expression[j] = expj;
    
    }
  
   return false;
}

static void input() throws IOException
{
   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  
   for(int i=0; i<NUM; ++i)
   {
    System.out.println("输入第" + (i+1) + "个数:");
    expression[i] = reader.readLine();
    number[i] = Double.parseDouble(expression[i]);
   }
}

public static void main(String[] args) 
{
   // TODO 自动生成方法存根
   number = new double[NUM];
   expression = new String[NUM];
  
   try
   {
    input();
   }
   catch(Exception e)
   {
    System.out.println(e.toString());
   }
  
   if(circule(NUM))
   {
    System.out.println("找到了上述的匹配式子!");
   }
   else
   {
    System.out.println("找不出匹配的式子!");
   }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值