题目:
解题思路:
代码:
import java.util.Scanner;
public class 算24 {
public static double a[] = new double[5];
public static double EPS = 1e-6;
public static boolean isZero(double x){
return Math.abs(x)<=EPS;
}
public static boolean count24(double[] a, int n){
//用数组a里面的n个数来计算24
if(n==1){
if(isZero(a[0]-24))
return true;
else
return false;
}
double b[] = new double[5];//b数组用来存储剩余的数
for(int i=0; i<n-1; i++){
for(int j=i+1; j<n; j++){//枚举两个数的组合
int m=0; //m表示还剩余多少数
for(int k=0; k<n; k++){
if(k!=i&&k!=j){
b[m++]=a[k];
}
}
b[m]=a[i]+a[j];
if(count24(b, m+1))//m从0开始,所以有m+1个数
return true;
b[m]=a[i]-a[j];
if(count24(b, m+1))
return true;
b[m]=a[j]-a[i];
if(count24(b, m+1))
return true;
b[m]=a[i]*a[j];
if(count24(b, m+1))
return true;
if(!isZero(a[j])){
b[m]=a[i]/a[j];
if(count24(b, m+1))
return true;
}
if(!isZero(a[i])){
b[m]=a[j]/a[i];
if(count24(b, m+1))
return true;
}
}
}
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=4;
while(true){
for(int i=0; i<n; i++){
a[i] = scan.nextInt();
}
if(isZero(a[0])&&isZero(a[1])&&isZero(a[2])&&isZero(a[3]))
break;
System.out.println(count24(a, n)?"YES":"NO");
}
}
}