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点,还没能 将所有可能的表达式都列出来!