24点:java版

package scb.com;

/**
 * @author Frank,Bian
 */
public class Points {

	public static boolean checkArray(double[] target){  //check the input data
		if(target.length!=4){
			System.out.println("input error");
			return false;
		}
		for(int i=0;i<4;i++){
			if(target[i]<1||target[i]>13){
				System.out.println("input error");
				return false;
			}
		}
		return true;
		
	}
	String[] expression = new String[4];
	public void initExpression(double[] target){   // init the expression arrays!!!
		for(int i=0;i<target.length;i++){
			expression[i]=target[i]+"";
		}
	}
//	List<String> expression = new ArrayList<String>();
//	int flag = 0 ;
	/**
	 * KEY FUNCTION 
	 * @author Frank,Bian
	 */
	public boolean launch(double[] arrs,int begin){  //recursion function  
		if(begin==3&&arrs[begin]==24){
			System.out.println(expression[begin]);
//			flag++;
			return true;
		}
		for(int i = begin ; i<3;i++){
			for(int j=i+1; j <4 ;j++){
				double a = arrs[i];   //temp var
				double b = arrs[j];    // temp var 
				String expr1 = expression[i];  //temp var
				String expr2 = expression[j];   //temp var 
				// +
				arrs[j]= a+b;
				expression[j] = "("+expr1+"+"+expr2+")";
				if(launch(arrs, begin+1)){
					return true;
				}
				//a-b
				arrs[j]= a-b ;
				expression[j] = "("+expr1+"-"+expr2+")";
				if(launch(arrs, begin+1)){
					return true;
				}
				// b- a
				arrs[j] = b-a;
				expression[j] = "("+expr2+"-"+expr1+")";
				if(launch(arrs, begin+1)){
					return true;
				}
				
				// *
				arrs[j] = a*b;
				expression[j] = "("+expr1+"*"+expr2+")";
				if(launch(arrs,begin+1)){
					return true;
				}
				//   a/b
				if(b != 0){
					arrs[j] = a/b;
					expression[j] = "("+expr1+"/"+expr2+")";
					if(launch(arrs, begin+1)){
						return true;
					}
				}
				if(a!=0){
					arrs[j] =b/a;
					expression[j] = "("+expr2+"/"+expr1+")";
					if(launch(arrs, begin+1)){
						return true;
					}
				}
				
				arrs[i] = a;   //keep status for next phase
				arrs[j] = b;
				expression[i] = expr1;
				expression[j] = expr2;
			}
		}
		return false;
		
	}

	public static void main(String[] args){
		double[] target = {5,1,5,5};
		System.out.println(target.length);
		if(Points.checkArray(target)){
			Points ps = new Points();
			ps.initExpression(target);
			if(ps.launch(target,0)){
				System.out.println("this target is OK!" );
			}else{
				System.out.println("this target is NOT OK!");
			}
		}
		
	}
	

}


这里只能判断一个组合是否可以能组合成24点,还没能 将所有可能的表达式都列出来!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值