题目

解法
C++
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double myCalculate(double a,double b,int symbol){
switch (symbol){
case 0 :
return a + b;
case 1 :
return a - b;
case 2 :
return a * b;
default :
return a / b;
}
}
int is24(double * calculateArr){
int i,j,k;
for (i = 0;i < 4; i++){
double res1 = myCalculate(calculateArr[0],calculateArr[1],i);
double otherRes1 = myCalculate(calculateArr[0],calculateArr[1],i);
for (j = 0;j < 4;j++){
double res2 = myCalculate(calculateArr[2],res1,j);
double otherRes2 = myCalculate(calculateArr[2],calculateArr[3],j);
for (k = 0;k < 4;k++){
double res3 = myCalculate(calculateArr[3],res2,k);
double otherRes3 = myCalculate(otherRes1,otherRes2,k);
if ( fabs(res3 - 24) < 0.00001 || fabs(otherRes3 - 24) < 0.00001 ){
return 1;
}
}
}
}
return 0;
}
int function (int * a,double *flag,int layer,double * calculateArr){
int i;
if (layer == 4)
return is24(calculateArr);
for (i = 0; i < 4; i++) {
if (flag[i] == 1) {
flag[i] = 0;
calculateArr[layer] = a[i];
if (function(a, flag, layer+1,calculateArr))
return 1;
flag[i] = 1;
}
}
return 0;
}
int main(int argc, char *argv[]) {
int a[4];
double flag[4],calculateArr[4];
int i;
for(i = 0 ;i < 4;i++){
scanf("%d",&a[i]);
flag[i] = 1;
}
if(function(a, flag,0, calculateArr) == 1)
printf("true");
else
printf("false");
return 0;
}