直接深度优先搜索所有情况,全部进行计算,然后得出结果,最后有一个测试用例过不了,后面想到应该是数据的除法问题,可能因为精度丢失近似24,而int类型会认为是24,全部修改成double类型之后就能过了

#include<stdio.h>
#include<string.h>
double num[5],flag=0;
bool vis[5];
void dfs(int step,double sum){
    if(step==3){
        if(sum==24){
            flag=1;
            return ;    
        }
    }else{
        step++;
        for(int i=0;i<4;i++){
            if(vis[i]==0){
                vis[i]=1;
                dfs(step,sum+num[i]);
                dfs(step,sum-num[i]);
                dfs(step,sum*num[i]);
                dfs(step,sum/num[i]);    
                vis[i]=0;
            }

        }

    }
}
int main(){
    while(scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3])!=EOF){
        flag=0;
        memset(vis,0,sizeof(vis));
        dfs(-1,0);
        if(flag==1){
            printf("true\n");
        }else{
            printf("false\n");
        }    
    }

    return 0;
}